Files
wenzi/docs/tasks-2025-09-30.md

74 lines
4.6 KiB
Markdown
Raw 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.
# 任务清单(质量闭环:分析 → 实施 → 验证 → 优化)
## 0) 推送至 Gitea 并启用 CI/CDWoodpecker
- 分析:需要标准化远程仓库与流水线,以便每个任务完成后自动执行完整验证。
- 实施:
- 在 Gitea 上创建仓库建议名称mosquito
- 本地添加远程并推送:`git remote add origin <gitea_url>; git push -u origin <branch>`
- 使用 Woodpecker已添加 `.woodpecker.yml`,默认在 push/PR 触发 `mvn clean verify` 全量验证与打包。
- 验证:在 Gitea 中查看流水线执行成功build+test 通过,产物成功构建)。
- 优化:后续按需要加入缓存、制品归档、分支保护与质量门禁。
## 1) 统一异常处理与错误响应格式
- 分析:当前仅部分异常带 `@ResponseStatus`无统一错误结构code/message/path/timestamp
- 实施:新增 `GlobalExceptionHandler``@ControllerAdvice`),覆盖验证异常、业务异常与兜底异常;定义标准错误响应模型。
- 验证:
- 控制器集成测试断言 400/403/404 等状态码与错误体结构。
- 示例:`mvn -q -Dtest=*ControllerTest test`
- 优化:记录错误码表到 `docs/api.md`,引入日志关联 ID。
## 2) 移除 `Thread.sleep` 模拟延迟
- 分析:`ActivityService#getLeaderboard` 阻塞线程,影响吞吐与可测试性。
- 实施:引入 `DelayProvider` 接口并在生产实现为无延迟,测试实现可配置;删除 `Thread.sleep`
- 验证:缓存测试通过且时延显著下降;`ActivityServiceCacheTest` 仍然命中缓存。
- 优化:必要时改为异步计算与预热策略。
## 3) 领域模型与数据库对齐(引入 JPA / Repository
- 分析:领域为内存态,与 Flyway 表(如 JSONB、状态字段不一致。
- 实施:为 `Activity / ApiKey / DailyActivityStats / MultiLevelRewardRule` 增加 JPA 注解与映射;新增 `Repository`;服务改用持久化。
- 验证:
- H2 下 `@DataJpaTest``@SpringBootTest` 通过;`SchemaVerificationTest` 增强校验关键列与约束。
- 示例:`mvn -q -Dtest=*Jpa* test`
- 优化:实体与 Flyway 迁移保持前滚兼容;引入测试数据工厂。
## 4) 缓存策略与配置
- 分析:仅使用 `@Cacheable`,缺少 TTL、序列化与命名规范。
- 实施:添加 `CacheConfig` 设置默认 TTL如 5m`RedisCacheConfiguration` 与 JSON 序列化;键空间命名统一。
- 验证:集成测试校验缓存生效与过期;命中率指标可观测。
- 优化:按端点分组 TTL加入手动失效接口或消息驱动失效。
## 5) API Key 安全增强
- 分析:当前为 `UUID + salt + SHA-256`;建议 KDFBCrypt/Argon2并完善审计。
- 实施:引入 `BCryptPasswordEncoder` 存储哈希,新增校验与轮换逻辑,记录 `last_used_at` 更新。
- 验证:
- 单测验证加密强度(无法逆推)与匹配成功;
- 集成测试覆盖创建/撤销/使用审计。
- 优化:支持密钥前缀与分段展示;限流与告警。
## 6) 覆盖率与质量门禁
- 分析:无覆盖率阈值;关键逻辑测试缺口。
- 实施:引入 JaCoCo 插件并设置最低阈值(例如 80%);补充奖励计算、多级奖励、上传大小/类型、权限异常等单测。
- 验证:`mvn -q verify` 通过且生成 `target/site/jacoco/index.html`
- 优化:在 CI 中发布覆盖率报告与趋势。
## 7) 多环境配置dev/test/prod
- 分析:仅 `application.properties`,未分环境。
- 实施:新增 `application-dev.yml``application-test.yml``application-prod.yml`;区分数据源/Flyway/日志级别/缓存设置。
- 验证:本地 `SPRING_PROFILES_ACTIVE=dev` 可运行,测试默认 `test`,构建产物默认 `prod`
- 优化:敏感配置使用环境变量或外部化配置。
## 8) 依赖治理JPA/AMQP
- 分析:已引入 `spring-boot-starter-data-jpa``spring-boot-starter-amqp`,暂未落地。
- 实施:二选一:
1) 近期不引入消息与持久化:移除未用 starter
2) 落地仓储与消息接口:新增最小可用实现与集成测试。
- 验证:`mvn -q verify` 通过;依赖树精简(`mvn -q dependency:tree`)。
- 优化:定期审计依赖、锁定版本、启用漏洞扫描。
## 9) 注解迁移javax → jakarta仅测试配置
- 分析:`EmbeddedRedisConfiguration` 使用 `javax.annotation`
- 实施:迁移至 `jakarta.annotation`;清理 `javax.annotation-api` 依赖或限定 test scope。
- 验证:测试环境可正常启动嵌入式 Redis端口注入仍生效。
- 优化:统一全仓库注解命名空间。