Files
2026-10-20 21:53:26 +08:00

73 lines
2.7 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.
# 12.5 代码审查清单
:::tip 概述
Review 按"架构红线 → 安全 → 正确性 → 规范"四层组织。红线项(绕过 dao/反向依赖等)任何一项都应直接打回。
:::
## 架构红线(一票否决)
```text
□ 绕过 dao.Ctx 直连 g.DB() 查业务表
□ 手写 del_flag / tenant_id 条件
□ 租户级新表未登记 hooks.tenantTables
□ logic 反向 import internal/task
□ middleware 直接 import 业务包(应走 wire.go 函数变量)
□ internal/migrate 走 dao/logic(应 gdb 裸连)
□ base.go 导出函数超 15 个(应拆子包)
□ 整体运行 gf gen service 覆盖手工接口文件
□ 唯一预检范围 ≠ 唯一索引范围(Group 缺失)
□ gmeta path 带 /v1 版本段 / public 白名单三处不一致
```
## 安全 Review
```text
□ 新接口声明了 permission(或评审确认留空=登录即可)
□ 权限码符合 sys:{module小驼峰}:{action}
□ 入参有 gvalid 校验(required/范围/格式)
□ 敏感字段不出接口(password/salt)
□ 日志不打印密码/令牌(maskSecret 覆盖)
□ SQL 无字符串拼接(全参数化)
□ 文件上传走白名单+嗅探链(未自造上传口)
□ 富文本处理未破坏 [IMG_URL] 契约 / 未引入外站抓取(SSRF)
□ 新缓存键有失效点或短 TTL(对照 4.8 原则)
```
## 正确性 Review
```text
□ 事务边界正确(bcrypt/HTTP/文件 IO 不在事务内)
□ 钩子内无 append / 无 IO / 错误上抛
□ 错误处理不吞 err(不 _ = 忽略关键错误)
□ 分页走 PageData;空集 []
□ 导出走 applyFilters(导出=所见)
□ N+1 查询(循环内查库)→ 批查改造(userExpandNames 模式)
□ 并发安全(共享 map 加锁;goroutine 泄漏)
□ LastInsertId 回主键(禁雪花)
□ 前端三件套对齐(querySchemas/Req/spec)
□ 前端按钮 v-permission 对齐 gmeta
```
## 规范 Review
```text
□ 文件命名 snake_case(后端)/ 驼峰(前端)
□ 注释按当前功能直述(无比较/来源痕迹)
□ json 驼峰(下划线仅登录/令牌例外)
□ service 接口同步更新(手维护)
□ 日志标题 "{模块中文名}-{动作}"、logType 正确
□ gofmt / go vet / vue-tsc / eslint 通过
□ 文档同步(接口清单/表清单/配置项有变更时)
□ 破坏性变更走版本化说明 + 黄金样本更新
```
## Review 实践建议
```text
小 PR(<400 行)优先;大重构拆分提交
先看设计(spec 声明/钩子划分)再看细节
生成器产物看增量 diff(不逐行 review 模板产物)
测试:修复类看是否有回归测试;新功能看冒烟路径
评论给"为什么+建议",不只给"改成什么"
```