Files
huang 867e97af11 重构:统一 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>
2026-01-12 16:01:53 +08:00

4.8 KiB
Raw Permalink Blame History

提案:将 IoT 模型迁移到统一的 internal/model/ 目录

动机 (Motivation)

当前 IoT 模块的数据模型被放置在 internal/iot/model/ 目录下,这与项目的其他模型(如 Shop、Account、Enterprise 等)不一致。其他模型都统一放在 internal/model/ 目录下。

存在的问题:

  1. 目录结构不一致IoT 模型使用 internal/iot/model/,而其他模型使用 internal/model/,导致项目结构混乱
  2. 导入路径冗余:引用 IoT 模型时需要写 internal/iot/model,而其他模型只需要 internal/model
  3. 违反项目约定:根据 openspec/project.md 的架构规范,所有模型应该统一在 Model 层管理
  4. 可维护性下降:新开发者容易困惑,不知道应该把模型放在哪里

当前 IoT 模型文件清单11 个文件):

  • internal/iot/model/carrier.go - 运营商模型
  • internal/iot/model/commission.go - 佣金模型
  • internal/iot/model/data_usage.go - 流量使用记录模型
  • internal/iot/model/device.go - 设备模型
  • internal/iot/model/financial.go - 财务记录模型
  • internal/iot/model/iot_card.go - IoT 卡模型
  • internal/iot/model/number_card.go - 号卡模型
  • internal/iot/model/order.go - 订单模型
  • internal/iot/model/package.go - 套餐模型
  • internal/iot/model/polling.go - 轮询配置模型
  • internal/iot/model/system.go - 系统配置模型

提案内容 (Proposed Change)

将所有 IoT 相关模型从 internal/iot/model/ 迁移到 internal/model/,与项目的其他模型保持一致。

迁移方案:

  1. internal/iot/model/ 目录下的所有 .go 文件移动到 internal/model/
  2. 所有文件的包名保持为 package model(无需修改)
  3. 删除空的 internal/iot/model/ 目录
  4. 检查是否有其他代码引用了 internal/iot/model,如果有则更新导入路径(当前搜索未发现引用)
  5. 验证所有模型文件的包名一致性,确保都是 package model

目标结构:

internal/
├── model/              # 统一的模型目录
│   ├── account.go
│   ├── shop.go
│   ├── enterprise.go
│   ├── personal_customer.go
│   ├── role.go
│   ├── permission.go
│   ├── carrier.go          # ← 从 internal/iot/model/ 迁移
│   ├── commission.go       # ← 从 internal/iot/model/ 迁移
│   ├── data_usage.go       # ← 从 internal/iot/model/ 迁移
│   ├── device.go           # ← 从 internal/iot/model/ 迁移
│   ├── financial.go        # ← 从 internal/iot/model/ 迁移
│   ├── iot_card.go         # ← 从 internal/iot/model/ 迁移
│   ├── number_card.go      # ← 从 internal/iot/model/ 迁移
│   ├── order.go            # ← 从 internal/iot/model/ 迁移
│   ├── package.go          # ← 从 internal/iot/model/ 迁移
│   ├── polling.go          # ← 从 internal/iot/model/ 迁移
│   ├── system.go           # ← 从 internal/iot/model/ 迁移
│   ├── ...
├── iot/                # IoT 业务逻辑目录
│   ├── handler.go      # 未来IoT Handler 层
│   ├── service.go      # 未来IoT Service 层
│   └── store.go        # 未来IoT Store 层
└── ...

影响范围 (Impact)

好消息: 经过代码搜索,目前 没有发现任何代码引用 internal/iot/model,因此这是一个零影响的重构。

潜在风险:

  • 如果未来有代码在提案实施期间新增了对 internal/iot/model 的引用,需要同步更新
  • 数据库迁移脚本不受影响(模型位置变更不影响表结构)

不影响的部分:

  • 数据库表结构
  • API 接口
  • 业务逻辑
  • 测试代码(如果存在)

实施计划 (Implementation Plan)

  1. 移动文件:将 11 个模型文件从 internal/iot/model/ 移动到 internal/model/
  2. 删除空目录:删除 internal/iot/model/ 目录
  3. 验证包名:确认所有模型文件的包名都是 package model
  4. 搜索引用:再次搜索项目中是否有 internal/iot/model 的引用,如有则更新
  5. 运行测试:执行 go test ./... 确保没有破坏性变更
  6. 构建验证:执行 go build 确保项目可以正常编译

验收标准 (Acceptance Criteria)

  • 所有 IoT 模型文件已迁移到 internal/model/ 目录
  • internal/iot/model/ 目录已删除
  • 项目可以正常编译(go build 成功)
  • 所有测试通过(如果存在测试)
  • 项目中不存在 internal/iot/model 的引用(已更新文档中的引用)

参考资料 (References)

  • 项目架构规范:openspec/project.md
  • 现有模型目录:internal/model/
  • IoT 相关规格:openspec/specs/iot-card/spec.md