# 代码质量检查清单

## 自动化工具

### 1. ESLint - 代码规范检查
```bash
npm run lint
```

### 2. Prettier - 代码格式化
```bash
npm run format
npm run format:check
```

### 3. TypeScript 类型检查
```bash
npm run build
# 或
tsc --noEmit
```

### 4. 测试覆盖率
```bash
npm run test:cov
```
**目标覆盖率：**
- 整体覆盖率 > 80%
- 关键业务逻辑 > 90%
- 领域模型 > 95%

### 5. SonarQube - 代码质量分析
```bash
# Docker 启动 SonarQube
docker run -d --name sonarqube -p 9000:9000 sonarqube:latest

# 扫描项目
npx sonar-scanner \
  -Dsonar.projectKey=identity-service \
  -Dsonar.sources=src \
  -Dsonar.host.url=http://localhost:9000
```

检查指标：
- Code Smells
- Bugs
- Vulnerabilities
- Security Hotspots
- Duplications
- Technical Debt

### 6. 循环复杂度检查
```bash
npm install -g complexity-report
cr --format json src/**/*.ts
```
**目标：**
- 函数循环复杂度 < 10
- 文件平均复杂度 < 5

## 手动代码审查清单

### 架构和设计
- [ ] 遵循 DDD 原则
- [ ] 清晰的层次划分（Domain/Application/Infrastructure/API）
- [ ] 依赖方向正确（外层依赖内层，内层不依赖外层）
- [ ] 没有循环依赖
- [ ] 接口隔离，依赖倒置

### 领域层
- [ ] 值对象是不可变的
- [ ] 实体有唯一标识
- [ ] 聚合根控制一致性边界
- [ ] 领域事件正确发布
- [ ] 业务规则在领域层，不在应用层

### 应用层
- [ ] Command/Query 职责明确
- [ ] Handler 只协调，不包含业务逻辑
- [ ] 事务边界合理
- [ ] 异常处理恰当

### 基础设施层
- [ ] Repository 不泄露持久化细节
- [ ] 外部服务接口清晰
- [ ] 错误处理和重试机制

### API 层
- [ ] DTO 验证充分
- [ ] 错误响应统一
- [ ] API 文档完整（Swagger）
- [ ] 版本控制策略

### 安全
- [ ] 没有硬编码的密钥/密码
- [ ] 敏感数据加密
- [ ] 输入验证和消毒
- [ ] SQL 注入防护（使用 ORM）
- [ ] XSS 防护

### 性能
- [ ] 没有 N+1 查询
- [ ] 合理使用索引
- [ ] 避免阻塞操作
- [ ] 合理的缓存策略
- [ ] 分页查询，避免全表扫描

### 可维护性
- [ ] 代码可读性好
- [ ] 函数/类职责单一
- [ ] 命名清晰准确
- [ ] 注释充分但不冗余
- [ ] 避免魔法数字

### 测试
- [ ] 单元测试覆盖关键逻辑
- [ ] 测试用例清晰可读
- [ ] 测试独立，不依赖顺序
- [ ] Mock 使用恰当

## 依赖分析

### 检查依赖关系
```bash
npm install -g madge

# 生成依赖图
madge --image deps.png src/

# 检查循环依赖
madge --circular src/
```

### 检查未使用的依赖
```bash
npm install -g depcheck
depcheck
```

### 检查过时的依赖
```bash
npm outdated
```

## 文档检查
- [ ] README.md 完整
  - [ ] 项目介绍
  - [ ] 安装步骤
  - [ ] 运行命令
  - [ ] 环境变量说明
  - [ ] API 文档链接

- [ ] 架构文档
  - [ ] 系统架构图
  - [ ] 领域模型图
  - [ ] 数据库 ER 图
  - [ ] API 接口文档

- [ ] 开发文档
  - [ ] 开发环境搭建
  - [ ] 编码规范
  - [ ] Git 工作流
  - [ ] 测试指南

## Git 提交质量
- [ ] Commit message 清晰
- [ ] 每个 commit 是原子性的
- [ ] 没有提交敏感信息
- [ ] 分支策略清晰
