---
description: 代码审查检查清单（手动应用）
globs:
alwaysApply: false
---

# 代码审查检查清单

在提交代码前，请确保以下各项都已检查：

## 多租户数据隔离

- [ ] 所有数据库查询包含 `tenantId` 条件
- [ ] 创建数据时设置了 `tenantId`
- [ ] 更新/删除操作验证了 `tenantId`
- [ ] 新的 Prisma 模型包含了必需的审计字段

## 数据验证

- [ ] DTO 验证规则完整
- [ ] 前端和后端都进行了数据验证
- [ ] 使用了 TypeScript 类型定义
- [ ] 处理了所有必填字段

## 错误处理

- [ ] 所有异步操作都有错误处理
- [ ] 错误信息清晰明确
- [ ] 使用了合适的 HTTP 状态码
- [ ] 前端显示了友好的错误提示

## 权限控制

- [ ] 后端使用了 `@RequirePermission()` 装饰器
- [ ] 前端路由配置了 `permissions` meta
- [ ] 权限验证失败返回 403
- [ ] 遵循最小权限原则

## 代码质量

- [ ] 代码格式符合 ESLint/Prettier 规范
- [ ] 复杂逻辑添加了注释
- [ ] 变量和函数命名清晰
- [ ] 无硬编码配置（使用环境变量）
- [ ] 无调试代码（console.log 等）

## 性能优化

- [ ] 数据库查询使用了 `include` 预加载
- [ ] 使用了 `select` 精简字段
- [ ] 实现了分页查询
- [ ] 避免了 N+1 查询
- [ ] 前端组件按需加载

## 安全性

- [ ] 敏感数据加密存储
- [ ] API 需要认证（除非 `@Public()`）
- [ ] 防止了 SQL 注入（使用 Prisma）
- [ ] 防止了 XSS 攻击
- [ ] Token 过期时间合理

## 测试

- [ ] 核心业务逻辑有单元测试
- [ ] 测试覆盖率 > 80%
- [ ] 所有测试通过

## Git 提交

- [ ] 提交信息清晰（使用中文）
- [ ] 提交信息格式：`类型: 描述`
- [ ] 一次提交只做一件事
- [ ] 不包含敏感信息

## 文档

- [ ] 复杂功能有文档说明
- [ ] API 接口有注释
- [ ] README 更新（如有必要）

## 使用建议

### 在提交前运行

```bash
# 后端
cd backend
pnpm lint           # 代码检查
pnpm test          # 运行测试
pnpm build         # 确保能成功构建

# 前端
cd frontend
pnpm lint          # 代码检查
pnpm build         # 确保能成功构建
```

### 自动化检查

考虑使用 Git hooks（如 husky）自动执行检查：
- pre-commit: 运行 lint
- pre-push: 运行测试

### Code Review 关注点

审查他人代码时，重点关注：
1. **数据安全**：租户隔离是否完整
2. **权限控制**：是否正确验证权限
3. **错误处理**：是否处理所有异常情况
4. **代码质量**：是否易于理解和维护
5. **性能**：是否有明显的性能问题
