5.4 KiB
5.4 KiB
Draft: Gateway Integration 实施计划
需求确认(已完成)
用户目标
实现 Gateway API 统一封装,提供 14 个物联网卡和设备管理接口的类型安全封装,支持复杂的认证机制(AES-128-ECB 加密 + MD5 签名)。
核心需求
- 加密/签名机制: AES-128-ECB 加密(密钥: MD5(appSecret),填充: PKCS5,编码: Base64) + MD5 签名(参数字母序拼接 + 大写十六进制)
- API 封装: 流量卡 API(7个) + 设备 API(7个)
- 配置集成: GatewayConfig + 环境变量覆盖 + Bootstrap 依赖注入
- 错误处理: 定义错误码 1110-1119,统一错误包装和日志
- 测试覆盖: 单元测试覆盖率 ≥ 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(集成测试)
风险点
- AES-ECB实现复杂度: 等待bg_f36926a0调研结果
- 签名算法兼容性: 需要端到端集成测试验证
- Gateway响应格式: 需要mock测试 + 真实API测试
- 配置验证逻辑: 需要仔细测试必填项和格式验证
下一步
等待bg_f36926a0完成AES-ECB调研,然后生成完整的执行计划。