# 提案：将 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`
