156 lines
5.4 KiB
Markdown
156 lines
5.4 KiB
Markdown
# 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调研,然后生成完整的执行计划。
|