Files
junhong_cmp_fiber/.sisyphus/drafts/gateway-integration.md
2026-01-30 17:05:44 +08:00

156 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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调研,然后生成完整的执行计划。