# Implementation Tasks

## 1. 数据库迁移文件

- [x] 1.1 创建 up 迁移文件：`migrations/000007_add_wallet_transfer_tag_tables.up.sql`
- [x] 1.2 创建 down 迁移文件：`migrations/000007_add_wallet_transfer_tag_tables.down.sql`
- [x] 1.3 在 up 迁移中创建钱包相关表（tb_wallet, tb_wallet_transaction, tb_recharge_record）
- [x] 1.4 在 up 迁移中创建换卡记录表（tb_card_replacement_record）
- [x] 1.5 在 up 迁移中创建标签相关表（tb_tag, tb_resource_tag）
- [x] 1.6 在 up 迁移中修改运营商表（tb_carrier 增加渠道字段）
- [x] 1.7 在 up 迁移中修改订单表（tb_order 增加钱包支付字段）
- [x] 1.8 添加必要的索引
- [x] 1.9 编写 down 迁移的回滚逻辑

## 2. Go 模型定义

- [x] 2.1 创建 `internal/model/wallet.go`，定义 Wallet、WalletTransaction、RechargeRecord 模型
- [x] 2.2 创建 `internal/model/card_replacement.go`，定义 CardReplacementRecord 模型
- [x] 2.3 创建 `internal/model/tag.go`，定义 Tag、ResourceTag 模型
- [x] 2.4 修改 `internal/model/carrier.go`，增加渠道相关字段
- [x] 2.5 修改 `internal/model/order.go`，增加钱包支付相关字段
- [x] 2.6 确保所有模型包含 gorm.Model 和 BaseModel（creator、updater 字段）
- [x] 2.7 确保所有模型通过 gorm.Model 包含标准字段（ID, CreatedAt, UpdatedAt, DeletedAt）
- [x] 2.8 为所有字段添加 GORM 标签（column、type、comment 等）
- [x] 2.9 为所有模型添加中文注释说明业务用途

## 3. 常量定义

- [x] 3.1 创建 `pkg/constants/wallet.go`，定义钱包类型、交易类型、状态等常量（含中文注释）
- [x] 3.2 创建 `pkg/constants/tag.go`，定义标签资源类型等常量（含中文注释）
- [x] 3.3 在 `pkg/constants/iot.go` 中定义运营商类型枚举（CMCC/CUCC/CTCC/CBN）和换卡原因常量
- [x] 3.4 在 `pkg/constants/redis.go` 中添加钱包和标签相关的 Redis Key 生成函数

## 4. 文档更新

- [x] 4.1 创建 `docs/add-wallet-transfer-tag-models/数据模型设计.md`，说明表结构设计
- [x] 4.2 创建 `docs/add-wallet-transfer-tag-models/字段说明.md`，详细说明各字段含义
- [x] 4.3 更新 AGENTS.md，添加模型规范和常量注释规范

## 5. 验证和测试

- [x] 5.1 运行 LSP 诊断验证模型定义无错误
- [x] 5.2 验证所有唯一索引包含 `deleted_at IS NULL` 条件
- [x] 5.3 验证模型定义与表结构一致
- [x] 5.4 验证常量定义完整且符合规范
- [x] 5.5 执行 `openspec validate add-wallet-transfer-tag-models --strict` ✅ 通过
- [x] 5.6 运行迁移文件，验证表创建成功 ✅ 迁移版本: 6 → 7 (282.5ms)
