## 1. 数据库迁移 - [x] 1.1 创建迁移文件:Carrier 表移除 channel_name、channel_code 字段及 idx_carrier_type_channel 索引 - [x] 1.2 创建迁移文件:IotCard 表添加 carrier_type、carrier_name 冗余字段,并从 Carrier 表填充现有数据 - [x] 1.3 创建迁移文件:IotCardImportTask 表添加 carrier_name 冗余字段,并从 Carrier 表填充现有数据 - [x] 1.4 执行迁移,验证数据完整性 ## 2. Model 层修改 - [x] 2.1 修改 `internal/model/carrier.go`:移除 ChannelName、ChannelCode 字段 - [x] 2.2 修改 `internal/model/iot_card.go`:添加 CarrierType、CarrierName 字段 - [x] 2.3 修改 `internal/model/iot_card_import_task.go`:添加 CarrierName 字段 ## 3. DTO 层 - [x] 3.1 创建 `internal/model/dto/carrier_dto.go`:定义 CreateCarrierRequest、UpdateCarrierRequest、CarrierListRequest、UpdateCarrierStatusRequest、CarrierResponse - [x] 3.2 修改 `internal/model/dto/iot_card_dto.go`:响应结构添加 carrier_type 字段(如果缺失) - [x] 3.3 修改 `internal/model/dto/iot_card_import_dto.go`:响应结构确认包含 carrier_name 字段 ## 4. Store 层 - [x] 4.1 创建 `internal/store/postgres/carrier_store.go`:实现 Create、GetByID、Update、Delete、List、GetByCode 方法 ## 5. Service 层 - [x] 5.1 创建 `internal/service/carrier/service.go`:实现 Create、Get、Update、Delete、List、UpdateStatus 业务逻辑 - [x] 5.2 修改 `internal/service/iot_card_import/service.go`:创建导入任务时填充 carrier_name;处理卡片时填充 carrier_type、carrier_name - [x] 5.3 修改 `internal/service/iot_card/service.go`:移除 loadCarrierData / loadRelatedData 中的 Carrier JOIN 逻辑,直接使用 IotCard 自身字段 - [x] 5.4 修改 `internal/service/device/binding.go`:移除 loadCarrierData 方法,直接使用 IotCard 的 carrier_name 字段 ## 6. Handler 层 - [x] 6.1 创建 `internal/handler/admin/carrier.go`:实现 Create、Get、Update、Delete、List、UpdateStatus 接口 ## 7. 路由注册 - [x] 7.1 创建 `internal/routes/carrier.go`:注册 /api/admin/carriers 路由组 - [x] 7.2 更新 `internal/routes/admin.go`:调用 Carrier 路由注册 ## 8. Bootstrap 注册 - [x] 8.1 修改 `internal/bootstrap/stores.go`:注册 CarrierStore - [x] 8.2 修改 `internal/bootstrap/services.go`:注册 CarrierService - [x] 8.3 修改 `internal/bootstrap/handlers.go`:注册 CarrierHandler ## 9. 常量定义 - [x] 9.1 在 `pkg/constants/` 中添加 CarrierType 枚举常量 - [x] 9.2 在 `pkg/errors/codes.go` 中添加 Carrier 相关错误码(CodeCarrierNotFound、CodeCarrierCodeExists 等) ## 10. 测试 - [x] 10.1 编写 CarrierStore 单元测试 - [x] 10.2 编写 CarrierService 单元测试 - [x] 10.3 编写 Carrier API 集成测试 - [x] 10.4 验证 IotCard 导入流程正确填充冗余字段(通过 TestIotCard_CarrierRedundantFields 验证) - [x] 10.5 验证 IotCard 查询响应正确返回冗余字段(通过 TestIotCard_GetByICCID 验证) ## 11. 文档更新 - [x] 11.1 更新 API 文档生成器(docs.go / gendocs/main.go)注册 CarrierHandler - [x] 11.2 运行 `go run cmd/gendocs/main.go` 生成 OpenAPI 文档