# Draft: Gateway Integration 实施计划

## 需求确认（已完成）

### 用户目标
实现 **Gateway API 统一封装**,提供 14 个物联网卡和设备管理接口的类型安全封装,支持复杂的认证机制(AES-128-ECB 加密 + MD5 签名)。

### 核心需求
1. **加密/签名机制**: AES-128-ECB 加密(密钥: MD5(appSecret),填充: PKCS5,编码: Base64) + MD5 签名(参数字母序拼接 + 大写十六进制)
2. **API 封装**: 流量卡 API(7个) + 设备 API(7个)
3. **配置集成**: GatewayConfig + 环境变量覆盖 + Bootstrap 依赖注入
4. **错误处理**: 定义错误码 1110-1119,统一错误包装和日志
5. **测试覆盖**: 单元测试覆盖率 ≥ 90%,集成测试验证真实 Gateway API

### 技术约束
- **禁止跳过 tasks.md 中的61个任务**
- **禁止合并或简化任务**
- **所有注释必须使用中文**
- **遵循项目代码规范(AGENTS.md)**

## 文档已读取

### OpenSpec 文档
- ✅ proposal.md - 提案概述和验收标准
- ✅ design.md - 详细设计文档(加密流程、请求流程、错误处理)
- ✅ tasks.md - 完整的61个任务清单(禁止跳过或简化)

### 规范文档
- ✅ specs/gateway-crypto/spec.md - 加密/签名规范(AES-ECB、MD5、PKCS5Padding)
- ✅ specs/gateway-config/spec.md - 配置集成规范(环境变量、验证逻辑)
- ✅ specs/gateway-client/spec.md - 客户端规范(14个API、DTO定义、并发安全)

## 背景调研（已完成 2/3）

### ✅ 已完成的调研

#### 1. 项目架构模式 (bg_2a5fab13)
**Bootstrap依赖注入模式**:
- 6步初始化顺序: Stores → GORM Callbacks → Services → Admin → Middlewares → Handlers
- Dependencies结构: DB, Redis, Logger, JWT, Token, Verification, Queue, Storage
- 新增客户端模式: Dependencies结构 → main.go初始化 → Service注入

**Config管理模式**:
- 配置结构: 层级嵌套 + mapstructure标签
- 环境变量: `JUNHONG_{SECTION}_{KEY}` 格式
- 验证逻辑: ValidateRequired() + Validate()
- 添加配置节: struct定义 → defaults/config.yaml → bindEnvVariables → Validate

**Error处理模式**:
- 错误码范围: 1000-1999(4xx) + 2000-2999(5xx)
- 错误码必须在codes.go中注册: allErrorCodes + errorMessages
- 使用方式: errors.New(code) 或 errors.Wrap(code, err)
- 自动映射: 错误码 → HTTP状态码 + 日志级别

**Service集成模式**:
- Store初始化: NewXxxStore(deps.DB, deps.Redis)
- Service构造器: 接收stores + 外部clients
- 方法错误处理: 验证用New(), 系统错误用Wrap()

#### 2. 测试模式和规范 (bg_6413c883)
**testutils核心函数**:
- `NewTestTransaction(t)`: 自动回滚的事务
- `GetTestRedis(t)`: 全局Redis连接
- `CleanTestRedisKeys(t, rdb)`: 自动清理Redis键

**集成测试环境**:
- `integ.NewIntegrationTestEnv(t)`: 完整测试环境
- 认证方法: AsSuperAdmin(), AsUser(account)
- 请求方法: Request(method, path, body)

**测试执行**:
- 必须先加载环境变量: `source .env.local && go test`
- 覆盖率要求: Service层 ≥ 90%

#### 3. AES-ECB加密最佳实践 (bg_f36926a0) ✅
**核心发现**:
- AES-ECB必须手动实现(Go标准库不提供)
- 生产级参考: TiDB的实现(~50行代码)
- PKCS5 = PKCS7(8字节块)
- MD5密钥派生: crypto/md5.Sum()返回[16]byte
- Base64编码: encoding/base64.StdEncoding

**安全注意**:
- ECB模式不推荐(外部系统强制要求)
- 必须验证所有填充字节,不只是最后一个
- MD5已被破解(仅用于遗留系统)

## 任务依赖分析（初步）

### Phase分析
基于tasks.md的5个Phase:

**Phase 1: 基础结构搭建 (4个任务, 30min)**
- Task 1.1: 创建目录结构 ✅ 独立
- Task 1.2: 加密/签名工具 ⏸️ 需等AES-ECB调研
- Task 1.3: Client基础结构 ⚠️ 依赖1.2
- Task 1.4: DTO定义 ✅ 独立

**Phase 2: API接口封装 (3个任务, 40min)**
- Task 2.1: 流量卡API(7个) ⚠️ 依赖1.3
- Task 2.2: 设备API(7个) ⚠️ 依赖1.3
- Task 2.3: 单元测试 ⚠️ 依赖2.1+2.2

**Phase 3: 配置和错误码 (2个任务, 20min)**
- Task 3.1: Gateway配置 ✅ 可与Phase 1并行
- Task 3.2: Gateway错误码 ✅ 可与Phase 1并行

**Phase 4: 依赖注入和集成 (2个任务, 20min)**
- Task 4.1: Bootstrap初始化 ⚠️ 依赖3.1+1.3
- Task 4.2: Service层集成 ⚠️ 依赖4.1

**Phase 5: 集成测试和文档 (2个任务, 10min)**
- Task 5.1: 集成测试 ⚠️ 依赖4.2
- Task 5.2: 更新文档 ✅ 可在最后并行

### 并行执行波次（初步）

**Wave 1 (可立即并行)**:
- Task 1.1: 创建目录
- Task 1.4: DTO定义
- Task 3.1: Gateway配置
- Task 3.2: Gateway错误码

**Wave 2 (依赖AES-ECB调研)**:
- Task 1.2: 加密/签名工具

**Wave 3 (依赖Wave 2)**:
- Task 1.3: Client基础结构

**Wave 4 (依赖Wave 3)**:
- Task 2.1: 流量卡API
- Task 2.2: 设备API
- Task 4.1: Bootstrap初始化

**Wave 5 (依赖Wave 4)**:
- Task 2.3: 单元测试
- Task 4.2: Service集成

**Wave 6 (依赖Wave 5)**:
- Task 5.1: 集成测试
- Task 5.2: 文档更新

### 关键路径识别
```
1.2(加密工具) → 1.3(Client结构) → 2.1/2.2(API封装) → 2.3(单元测试) → 4.2(Service集成) → 5.1(集成测试)
```

### 风险点
1. **AES-ECB实现复杂度**: 等待bg_f36926a0调研结果
2. **签名算法兼容性**: 需要端到端集成测试验证
3. **Gateway响应格式**: 需要mock测试 + 真实API测试
4. **配置验证逻辑**: 需要仔细测试必填项和格式验证

## 下一步
等待bg_f36926a0完成AES-ECB调研,然后生成完整的执行计划。
