重构:统一 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:
2026-01-12 16:01:53 +08:00
parent 034f00e2e7
commit 867e97af11
30 changed files with 1158 additions and 75 deletions

View File

@@ -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 分钟**