--- name: 全量代码审查:定位业务与技术逻辑 bug overview: 对项目全部 Go 源码(internal/ + pkg/ + global/ + main.go)做系统性代码审查,分模块定位业务逻辑与技术逻辑 bug,最终输出一份分类 bug 报告(含位置、原因、影响、严重程度),不做任何代码修改。 todos: - id: review-infra content: 使用 [subagent:code-explorer] 审查 main.go、global/ 与 pkg/ 基础设施及第三方集成 status: completed - id: review-dal content: 使用 [subagent:code-explorer] 审查 mysqlmodel、mysqldao、redismodel、redisdao 数据访问层 status: completed - id: review-money content: 使用 [subagent:code-explorer] 审查订单/支付/权益/配额资损链路,并用 [skill:lsp-code-analysis] 追踪关键函数调用关系 status: completed dependencies: - review-dal - id: review-content content: 使用 [subagent:code-explorer] 审查衣物/穿搭/收藏/点赞/通知/运势/AI 等业务逻辑 status: completed dependencies: - review-dal - id: review-auth content: 使用 [subagent:code-explorer] 审查中间件、路由与鉴权(JWT、越权、参数绑定、安全) status: completed - id: write-report content: 汇总各模块审查发现,输出分类中文 bug 报告(含位置、根因、影响、严重程度、建议) status: completed dependencies: - review-infra - review-dal - review-money - review-content - review-auth --- ## 用户需求 对 `/root/zt-closet-backend` 智能衣橱后端服务进行**全量静态代码审查**,确认是否存在**业务逻辑 bug** 或**技术逻辑 bug**。 ## 澄清结果 1. **交付方式**:仅输出一份分类的 **bug 报告**,**不做任何代码修改**。 2. **审查范围**:全部 Go 源码(`internal/` + `pkg/` + `global/` + `main.go`)。 ## 交付内容 一份中文 Markdown bug 报告,按「业务逻辑 bug」与「技术逻辑 bug」两大类组织,每条 bug 包含:文件路径与行号、问题描述、根因分析、影响、严重程度(高/中/低)、修复建议(仅建议,不实施)。报告需覆盖但不限于:订单支付退款、权益幂等发放、配额原子扣减与回退、并发与事务一致性、缓存一致性、鉴权与越权、金额/时间单位边界、错误处理与资源释放、安全(注入/越权/敏感信息泄露)等。 ## 审查技术方案 ### 审查方法 采用「分层 + 分域」静态审查策略,自底向上覆盖完整调用链: 1. **基础设施层**(`main.go`、`global/`、`pkg/`):配置加载与初始化顺序、OTel/slog 初始化、MySQL/Redis/COS/微信支付客户端初始化、优雅关闭、goroutine 调度器、错误处理与资源释放。 2. **数据访问层**(`internal/mysqlmodel/`、`internal/mysqldao/`、`internal/redismodel/`、`internal/redisdao/`):GORM 模型字段映射与索引/唯一约束、软删除、原子条件更新(`RowsAffected` 语义)、Redis key 设计与 TTL、分布式锁正确性(锁粒度、TTL、释放时 value 校验)。 3. **业务服务层**(`internal/service/`):事务边界、并发一致性、幂等性、金额单位、时间戳单位、AuthZ 归属校验、缓存一致性、错误码映射、分页边界。 4. **接口与鉴权层**(`internal/middleware/`、`internal/routers/`、`internal/dto/`):JWT 校验、会话降级策略、CORS、参数绑定、路由鉴权覆盖完整性。 ### 审查重点清单 - **资损敏感链路**:订单创建(先微信下单后落库的竞态)、支付回调幂等与金额校验、退款回调、权益幂等发放、补偿任务重试、配额原子扣减/回退/发放。 - **并发一致性**:分布式锁粒度与 TTL、锁释放误删风险、MySQL 条件更新的 `RowsAffected` 判断、多实例定时任务防重、`retry_count` 更新是否基于内存快照导致覆盖。 - **幂等性**:支付回调、退款回调、权益发放、补偿任务崩溃恢复(`benefitAlreadyGranted` 流水查重)。 - **边界与单位**:金额单位(分/元)、时间单位(秒/毫秒)、分页上限、切片越界/空指针、字符串截断(`genOrderNo`/`genRefundNo` 取 UUID 前 16 位)。 - **安全**:SQL 注入(GORM 参数绑定)、越权访问(`getOwnedOrder` 等归属校验是否完整覆盖)、日志敏感信息(openid/金额)、JWT 会话 Redis 故障降级放行的安全权衡。 - **资源与性能**:context 超时、goroutine 泄漏、Redis/DB 连接与 body 释放、N+1 查询、缓存穿透/击穿。 ### 报告格式 最终输出一份中文 Markdown bug 报告,结构如下: - 「业务逻辑 bug」章节:业务规则、状态流转、权益/资损、幂等、越权相关缺陷。 - 「技术逻辑 bug」章节:并发、事务、缓存、错误处理、资源管理、边界条件、安全相关缺陷。 - 每条含:`文件:行号`、问题描述、根因、影响、严重程度(高/中/低)、修复建议。 严重程度定义: - **高**:资损、数据丢失、越权、严重并发不一致、安全漏洞。 - **中**:功能错误、边界异常、异常处理缺失、缓存不一致。 - **低**:代码质量、潜在风险、性能隐患、维护性问题。 ### 审查覆盖范围 ``` /root/zt-closet-backend ├── main.go # 初始化与调度器启动 ├── global/ # 全局配置与连接(5 文件) ├── internal/ │ ├── service/ # 业务编排(16 文件) │ ├── mysqldao/ # MySQL DAO(14 文件) │ ├── redisdao/ # Redis DAO 含锁(10 文件) │ ├── mysqlmodel/ # GORM 模型(18 文件) │ ├── redismodel/ # Redis 模型与 key(11 文件) │ ├── dto/ # 请求/响应 DTO(13 文件) │ ├── middleware/ # JWT/CORS/日志/OTel(5 文件) │ └── routers/ # 路由与 handler(13 文件) └── pkg/ # 工具与第三方封装(29 文件) ``` ## 使用的扩展 ### SubAgent - **code-explorer** - 用途:对 `internal/`、`pkg/`、`global/`、`main.go` 等全部源码进行跨文件、跨目录的系统性读取与搜索,定位每个业务域的实现细节、调用关系与潜在缺陷。 - 预期产出:各模块的审查发现清单(文件路径 + 行号 + 疑似问题描述),供汇总阶段整理为最终报告。 ### Skill - **lsp-code-analysis** - 用途:对资损敏感链路的几个关键函数(如 `consumeQuota`、`refundQuota`、`grantQuota`、`grantBenefitIdempotent`、`retryBenefitTask`、`OrderUpdateStatusByOrderNo`)做语义级定义/引用/调用层次追踪,验证并发、事务与幂等逻辑是否安全。 - 预期产出:关键函数完整调用链与引用点,支撑并发/幂等结论的准确判断。