Files
EmailBill/openspec/changes/remove-v1-calendar-stats-budget/tasks.md
SunCheng a88556c784 fix
2026-02-15 10:10:28 +08:00

7.5 KiB
Raw Blame History

1. 准备工作 (Pre-deletion)

  • 1.1 创建 feature 分支 feature/remove-v1-modules
  • 1.2 运行所有现有测试,确认当前状态正常 (dotnet test)
  • 1.3 备份 V1 相关文件列表到变更目录 (用于回滚参考)

2. 后端 Service 层删除

  • 2.1 搜索并删除 BudgetService.GetUncoveredCategoriesAsync 方法 (V2在用已恢复)
  • 2.2 搜索并删除 BudgetService.GetArchiveSummaryAsync 方法 (V2在用已恢复)
  • 2.3 搜索并删除 BudgetStatsServiceBudgetSavingsService 中的 V1 专用方法 (如果有)
  • 2.4 搜索并删除 TransactionStatisticsService.GetBalanceStatisticsAsync 方法
  • 2.5 编译验证后端项目 (dotnet build)

3. 后端 Application 层删除

  • 3.1 删除 BudgetApplication.GetUncoveredCategoriesAsync 方法 (V2在用已恢复)
  • 3.2 删除 BudgetApplication.GetArchiveSummaryAsync 方法 (V2在用已恢复)
  • 3.3 删除 TransactionStatisticsApplication.GetBalanceStatisticsAsync 方法
  • 3.4 编译验证后端项目 (dotnet build)

4. 后端 Controller 层删除

  • 4.1 删除 TransactionRecordController.GetDailyStatisticsAsync 方法 (已标记 Obsolete)
  • 4.2 删除 BudgetController.GetUncoveredCategoriesAsync 方法 (V2在用已恢复)
  • 4.3 删除 BudgetController.GetArchiveSummaryAsync 方法 (V2在用已恢复)
  • 4.4 删除 TransactionStatisticsController.GetBalanceStatisticsAsync 方法
  • 4.5 编译验证后端项目 (dotnet build)
  • 4.6 运行后端测试,移除失败的 V1 相关测试用例 (dotnet test)

5. 前端 API 客户端清理

  • 5.1 在 Web/src/api/transactionRecord.js 中移除 GetDailyStatistics 直接调用 (如果有)
  • 5.2 Web/src/api/budget.js 中删除 getUncoveredCategories 函数 (V2在用已恢复)
  • 5.3 Web/src/api/budget.js 中删除 getArchiveSummary 函数 (V2在用已恢复)
  • 5.4 在 Web/src/api/statistics.js 中删除 getBalanceStatistics 函数
  • 5.5 搜索确认这些方法不在其他地方被引用 (发现 budgetV2 依赖,已恢复)

6. 前端页面文件删除

  • 6.1 删除 Web/src/views/CalendarView.vue 文件
  • 6.2 删除 Web/src/views/BudgetView.vue 文件
  • 6.3 删除 Web/src/views/statisticsV1/Index.vue 文件
  • 6.4 删除 Web/src/views/statisticsV1/ 整个目录 (如果为空)
  • 6.5 搜索确认这些页面不在其他地方被 import 引用 (发现路由和 App.vue 引用,待清理)

7. 前端路由配置清理

  • 7.1 在 Web/src/router/index.js 中删除 /calendar 路由定义
  • 7.2 在 Web/src/router/index.js 中删除 /budget 路由定义
  • 7.3 在 Web/src/router/index.js 中删除 / 指向 statisticsV1/Index.vue 的路由定义
  • 7.4 搜索并简化 useVersionStore 中的版本切换逻辑 (移除 V1 相关分支)
  • 7.5 搜索路由守卫中的 V1 相关判断逻辑并移除 (如 isV2() 判断)

8. 全局事件监听清理 (条件性)

  • 8.1 搜索 window.addEventListener('transaction-deleted'),确认是否仅 V1 页面监听
  • 8.2 搜索 window.addEventListener('transactions-changed'),确认是否仅 V1 页面监听
  • 8.3 如果仅 V1 监听,搜索 window.dispatchEvent(new Event('transaction-deleted')) 并删除触发代码
  • 8.4 如果仅 V1 监听,搜索 window.dispatchEvent(new Event('transactions-changed')) 并删除触发代码
  • 8.5 如果 V2 也在监听这些事件,保留触发代码并标记为"后续清理"任务

9. 前端构建验证

  • 9.1 安装依赖 (cd Web && pnpm install)
  • 9.2 运行 ESLint 检查 (pnpm lint)
  • 9.3 构建前端项目 (pnpm build)
  • 9.4 确认构建成功,无编译错误或警告

10. 手动测试验证 (V2 功能)

  • 10.1 启动开发服务器 (pnpm dev)
  • 10.2 测试 V2 统计页面 (/statistics-v2): 月度统计、分类统计、日度统计、交易列表
  • 10.3 测试 V2 统计页面: 余额折线图正常渲染 (验证前端计算余额逻辑)
  • 10.4 测试 V2 预算页面 (/budget-v2): 预算列表、分类统计、预算 CRUD、存款导航
  • 10.5 测试 V2 日历页面 (/calendar-v2): 日历渲染、日期统计、交易详情查看和编辑
  • 10.6 测试共享组件: TransactionList、TransactionDetail、PopupContainer 在 V2 中正常工作
  • 10.7 测试智能分类功能 (SmartClassifyButton) 在 V2 页面中正常工作
  • 10.8 验证访问 V1 路由 (/calendar, /budget, /) 返回 404 或重定向到 V2

注意: 以上手动测试任务需要在浏览器中实际运行应用并验证功能。代码实现已完成,等待用户验收。

11. 代码搜索验证 (确认无遗漏)

  • 11.1 全局搜索 CalendarView (大小写敏感),确认无残留引用
  • 11.2 全局搜索 BudgetView (大小写敏感),确认无残留引用
  • 11.3 全局搜索 statisticsV1 (大小写敏感),确认无残留引用
  • 11.4 全局搜索 GetDailyStatistics (TransactionRecordController),确认仅 TransactionStatisticsController 中存在
  • 11.5 全局搜索 GetUncoveredCategories,确认无残留引用
  • 11.6 全局搜索 GetArchiveSummary,确认无残留引用
  • 11.7 全局搜索 GetBalanceStatistics,确认无残留引用
  • 11.8 全局搜索 /calendar 路由,确认仅出现在测试或配置文件中
  • 11.9 全局搜索 /budget 路由,确认仅出现在测试或配置文件中

12. 测试用例清理

  • 12.1 搜索并删除 WebApi.Test/ 中针对 V1 API 的单元测试
  • 12.2 运行所有后端测试 (dotnet test),确保无失败测试
  • 12.3 如果有前端测试,运行并修复受影响的测试用例

13. 代码审查和提交

  • 13.1 使用 git status 确认所有修改的文件
  • 13.2 使用 git diff 审查每个删除的代码块,确认无误删
  • 13.3 提交变更到本地分支: git add . && git commit -m "feat: remove V1 calendar/budget/stats modules"
  • 13.4 推送到远程分支: git push origin feature/remove-v1-modules

14. Pull Request 和最终验证

  • 14.1 创建 Pull Request填写变更说明和测试结果
  • 14.2 代码审查: 确认删除的代码不在 V2 中被引用
  • 14.3 CI/CD 管道通过 (编译 + 测试)
  • 14.4 合并到主分支

15. 生产环境验证 (可选)

  • 15.1 部署到测试环境,验证 V2 页面功能完整性
  • 15.2 监控错误日志,确认无 404 或运行时错误
  • 15.3 部署到生产环境
  • 15.4 监控用户反馈和错误报告

回滚预案

如果在任何阶段发现 V2 功能异常:

  1. 立即回滚: git revert <commit-hash>git reset --hard <previous-commit>
  2. 定位问题: 使用 git diff 找到引起问题的删除操作
  3. 部分恢复: 仅恢复必要的文件或方法 (使用 git checkout <commit> -- <file>)
  4. 重新测试: 确认恢复后 V2 功能正常
  5. 分析根因: 更新任务清单,标记需要保留的代码

后续清理任务 (标记为 Non-Goal不在本次范围内)

  • 共享组件优化: 移除 TransactionList、TransactionDetail 等组件中的 V1 特定逻辑
  • 全局事件机制: 如果 V2 不再需要全局事件监听,迁移到 Pinia store
  • API 文档更新: 在 Swagger/Scalar 中标记已移除的端点
  • 用户文档更新: 说明 V1 已下线,引导用户使用 V2
  • 性能优化: 基于 V2 的使用数据优化接口和前端渲染逻辑