重构:统一 IoT 模型到 internal/model/ 目录
将所有 IoT 相关的数据模型从 internal/iot/model/ 迁移到 internal/model/, 实现全局统一的模型层架构,符合项目横向分层设计原则。 变更内容: - 迁移 11 个 IoT 模型文件(carrier, iot_card, device, order, package 等) - 删除 internal/iot/model/ 目录 - 更新文档中的模型路径引用(25 处) - 创建重构总结文档 - 归档 OpenSpec 变更为 2026-01-12-refactor-iot-model-location - 创建 model-organization 规格文档 验证结果: - 编译通过(go build 成功) - 静态分析通过(go vet 无错误) - 代码格式通过(go fmt 无变更) - 无 Go 代码引用旧路径 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
# 任务列表:IoT 模型位置重构
|
||||
|
||||
## 准备工作
|
||||
|
||||
- [x] **TASK-001**: 确认 `internal/model/` 目录已存在且可写
|
||||
- 验证方法:`ls -la internal/model/`
|
||||
- 预期输出:目录存在,包含现有模型文件
|
||||
- **结果**: ✅ 已确认
|
||||
|
||||
- [x] **TASK-002**: 确认 `internal/iot/model/` 目录包含 11 个模型文件
|
||||
- 验证方法:`ls internal/iot/model/ | wc -l`
|
||||
- 预期输出:11
|
||||
- **结果**: ✅ 已确认 11 个文件
|
||||
|
||||
- [x] **TASK-003**: 搜索项目中所有引用 `internal/iot/model` 的代码
|
||||
- 验证方法:`rg "internal/iot/model" internal/ --type go`
|
||||
- 预期输出:无结果(当前已验证)
|
||||
- **结果**: ✅ 无 Go 代码引用
|
||||
|
||||
## 迁移执行
|
||||
|
||||
- [x] **TASK-004**: 移动运营商模型文件
|
||||
- 命令:`git mv internal/iot/model/carrier.go internal/model/`
|
||||
- 验证:`test -f internal/model/carrier.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-005**: 移动佣金模型文件
|
||||
- 命令:`git mv internal/iot/model/commission.go internal/model/`
|
||||
- 验证:`test -f internal/model/commission.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-006**: 移动流量使用记录模型文件
|
||||
- 命令:`git mv internal/iot/model/data_usage.go internal/model/`
|
||||
- 验证:`test -f internal/model/data_usage.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-007**: 移动设备模型文件
|
||||
- 命令:`git mv internal/iot/model/device.go internal/model/`
|
||||
- 验证:`test -f internal/model/device.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-008**: 移动财务记录模型文件
|
||||
- 命令:`git mv internal/iot/model/financial.go internal/model/`
|
||||
- 验证:`test -f internal/model/financial.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-009**: 移动 IoT 卡模型文件
|
||||
- 命令:`git mv internal/iot/model/iot_card.go internal/model/`
|
||||
- 验证:`test -f internal/model/iot_card.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-010**: 移动号卡模型文件
|
||||
- 命令:`git mv internal/iot/model/number_card.go internal/model/`
|
||||
- 验证:`test -f internal/model/number_card.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-011**: 移动订单模型文件
|
||||
- 命令:`git mv internal/iot/model/order.go internal/model/`
|
||||
- 验证:`test -f internal/model/order.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-012**: 移动套餐模型文件
|
||||
- 命令:`git mv internal/iot/model/package.go internal/model/`
|
||||
- 验证:`test -f internal/model/package.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-013**: 移动轮询配置模型文件
|
||||
- 命令:`git mv internal/iot/model/polling.go internal/model/`
|
||||
- 验证:`test -f internal/model/polling.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
- [x] **TASK-014**: 移动系统配置模型文件
|
||||
- 命令:`git mv internal/iot/model/system.go internal/model/`
|
||||
- 验证:`test -f internal/model/system.go && echo "成功"`
|
||||
- **结果**: ✅ 已完成
|
||||
|
||||
## 清理工作
|
||||
|
||||
- [x] **TASK-015**: 验证 `internal/iot/model/` 目录已空
|
||||
- 验证方法:`ls internal/iot/model/`
|
||||
- 预期输出:无文件
|
||||
- **结果**: ✅ 目录为空
|
||||
|
||||
- [x] **TASK-016**: 删除空的 `internal/iot/model/` 目录
|
||||
- 命令:`rmdir internal/iot/model/`
|
||||
- 验证:`test ! -d internal/iot/model/ && echo "目录已删除"`
|
||||
- **结果**: ✅ 目录已删除
|
||||
|
||||
- [x] **TASK-017**: 检查 `internal/iot/` 目录是否还包含其他内容
|
||||
- 验证方法:`ls -la internal/iot/`
|
||||
- 如果为空,考虑删除 `internal/iot/` 目录
|
||||
- **结果**: ✅ 目录为空,但保留用于未来的 IoT Handler/Service/Store 层
|
||||
|
||||
## 验证工作
|
||||
|
||||
- [x] **TASK-018**: 再次搜索项目中所有引用 `internal/iot/model` 的代码
|
||||
- 验证方法:`rg "internal/iot/model" . --type go`
|
||||
- 预期输出:无结果
|
||||
- **结果**: ✅ 无 Go 代码引用
|
||||
|
||||
- [x] **TASK-019**: 验证所有迁移的模型文件包名正确
|
||||
- 验证方法:`grep "^package " internal/model/{carrier,commission,data_usage,device,financial,iot_card,number_card,order,package,polling,system}.go`
|
||||
- 预期输出:所有 11 个文件的包名都是 `package model`
|
||||
- **结果**: ✅ 所有文件包名统一为 `package model`
|
||||
|
||||
- [x] **TASK-020**: 运行 Go 代码格式检查
|
||||
- 命令:`go fmt ./...`
|
||||
- 预期输出:无需格式化(或格式化成功)
|
||||
- **结果**: ✅ 格式检查通过
|
||||
|
||||
- [x] **TASK-021**: 运行 Go 代码静态分析
|
||||
- 命令:`go vet ./...`
|
||||
- 预期输出:无错误
|
||||
- **结果**: ✅ 静态分析通过
|
||||
|
||||
- [x] **TASK-022**: 编译项目
|
||||
- 命令:`go build -o /tmp/junhong_cmp_fiber ./cmd/api`
|
||||
- 预期输出:编译成功,无错误
|
||||
- **结果**: ✅ 编译成功
|
||||
|
||||
- [x] **TASK-023**: 运行项目测试(如果存在)
|
||||
- 命令:`go test ./... -v`
|
||||
- 预期输出:所有测试通过(或无测试)
|
||||
- **结果**: ✅ 跳过(项目暂无测试)
|
||||
|
||||
## 文档更新
|
||||
|
||||
- [x] **TASK-024**: 检查是否需要更新项目文档
|
||||
- 验证方法:`rg "internal/iot/model" docs/ README.md CLAUDE.md 2>/dev/null`
|
||||
- 预期输出:无结果(或更新找到的文档)
|
||||
- **结果**: ✅ 已更新 `docs/iot-sim-management/表结构详细说明.md` 中的 25 处引用
|
||||
|
||||
- [x] **TASK-025**: 更新本次重构的总结文档
|
||||
- 创建 `docs/refactor-iot-model-location/` 目录
|
||||
- 编写重构总结(包含动机、影响、验证结果)
|
||||
- **结果**: ✅ 已完成,文档位于 `docs/refactor-iot-model-location/重构总结.md`
|
||||
|
||||
## 依赖关系
|
||||
|
||||
**并行任务:**
|
||||
- TASK-004 到 TASK-014 可以并行执行(移动文件操作互不依赖)
|
||||
|
||||
**串行依赖:**
|
||||
- TASK-001, TASK-002, TASK-003 必须在迁移前完成(准备工作)
|
||||
- TASK-004 到 TASK-014 必须在 TASK-015 之前完成(移动完成后才能验证)
|
||||
- TASK-015 必须在 TASK-016 之前完成(验证空目录后才能删除)
|
||||
- TASK-018 到 TASK-023 必须在 TASK-016 之后完成(清理完成后才能验证)
|
||||
|
||||
## 预计时间
|
||||
|
||||
- 准备工作:5 分钟
|
||||
- 迁移执行:5 分钟(自动化脚本)
|
||||
- 清理工作:2 分钟
|
||||
- 验证工作:5 分钟
|
||||
- 文档更新:10 分钟
|
||||
|
||||
**总计:约 30 分钟**
|
||||
Reference in New Issue
Block a user