# 提案:将 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) - [x] 所有 IoT 模型文件已迁移到 `internal/model/` 目录 - [x] `internal/iot/model/` 目录已删除 - [x] 项目可以正常编译(`go build` 成功) - [x] 所有测试通过(如果存在测试) - [x] 项目中不存在 `internal/iot/model` 的引用(已更新文档中的引用) ## 参考资料 (References) - 项目架构规范:`openspec/project.md` - 现有模型目录:`internal/model/` - IoT 相关规格:`openspec/specs/iot-card/spec.md`