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

143 lines
7.5 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.
## 1. 准备工作 (Pre-deletion)
- [x] 1.1 创建 feature 分支 `feature/remove-v1-modules`
- [x] 1.2 运行所有现有测试,确认当前状态正常 (`dotnet test`)
- [x] 1.3 备份 V1 相关文件列表到变更目录 (用于回滚参考)
## 2. 后端 Service 层删除
- [x] 2.1 ~~搜索并删除 `BudgetService.GetUncoveredCategoriesAsync` 方法~~ (V2在用已恢复)
- [x] 2.2 ~~搜索并删除 `BudgetService.GetArchiveSummaryAsync` 方法~~ (V2在用已恢复)
- [x] 2.3 搜索并删除 `BudgetStatsService``BudgetSavingsService` 中的 V1 专用方法 (如果有)
- [x] 2.4 搜索并删除 `TransactionStatisticsService.GetBalanceStatisticsAsync` 方法
- [x] 2.5 编译验证后端项目 (`dotnet build`)
## 3. 后端 Application 层删除
- [x] 3.1 ~~删除 `BudgetApplication.GetUncoveredCategoriesAsync` 方法~~ (V2在用已恢复)
- [x] 3.2 ~~删除 `BudgetApplication.GetArchiveSummaryAsync` 方法~~ (V2在用已恢复)
- [x] 3.3 删除 `TransactionStatisticsApplication.GetBalanceStatisticsAsync` 方法
- [x] 3.4 编译验证后端项目 (`dotnet build`)
## 4. 后端 Controller 层删除
- [x] 4.1 删除 `TransactionRecordController.GetDailyStatisticsAsync` 方法 (已标记 Obsolete)
- [x] 4.2 ~~删除 `BudgetController.GetUncoveredCategoriesAsync` 方法~~ (V2在用已恢复)
- [x] 4.3 ~~删除 `BudgetController.GetArchiveSummaryAsync` 方法~~ (V2在用已恢复)
- [x] 4.4 删除 `TransactionStatisticsController.GetBalanceStatisticsAsync` 方法
- [x] 4.5 编译验证后端项目 (`dotnet build`)
- [x] 4.6 运行后端测试,移除失败的 V1 相关测试用例 (`dotnet test`)
## 5. 前端 API 客户端清理
- [x] 5.1 在 `Web/src/api/transactionRecord.js` 中移除 `GetDailyStatistics` 直接调用 (如果有)
- [x] 5.2 ~~在 `Web/src/api/budget.js` 中删除 `getUncoveredCategories` 函数~~ (V2在用已恢复)
- [x] 5.3 ~~在 `Web/src/api/budget.js` 中删除 `getArchiveSummary` 函数~~ (V2在用已恢复)
- [x] 5.4 在 `Web/src/api/statistics.js` 中删除 `getBalanceStatistics` 函数
- [x] 5.5 搜索确认这些方法不在其他地方被引用 (发现 budgetV2 依赖,已恢复)
## 6. 前端页面文件删除
- [x] 6.1 删除 `Web/src/views/CalendarView.vue` 文件
- [x] 6.2 删除 `Web/src/views/BudgetView.vue` 文件
- [x] 6.3 删除 `Web/src/views/statisticsV1/Index.vue` 文件
- [x] 6.4 删除 `Web/src/views/statisticsV1/` 整个目录 (如果为空)
- [x] 6.5 搜索确认这些页面不在其他地方被 import 引用 (发现路由和 App.vue 引用,待清理)
## 7. 前端路由配置清理
- [x] 7.1 在 `Web/src/router/index.js` 中删除 `/calendar` 路由定义
- [x] 7.2 在 `Web/src/router/index.js` 中删除 `/budget` 路由定义
- [x] 7.3 在 `Web/src/router/index.js` 中删除 `/` 指向 `statisticsV1/Index.vue` 的路由定义
- [x] 7.4 搜索并简化 `useVersionStore` 中的版本切换逻辑 (移除 V1 相关分支)
- [x] 7.5 搜索路由守卫中的 V1 相关判断逻辑并移除 (如 `isV2()` 判断)
## 8. 全局事件监听清理 (条件性)
- [x] 8.1 搜索 `window.addEventListener('transaction-deleted')`,确认是否仅 V1 页面监听
- [x] 8.2 搜索 `window.addEventListener('transactions-changed')`,确认是否仅 V1 页面监听
- [x] 8.3 如果仅 V1 监听,搜索 `window.dispatchEvent(new Event('transaction-deleted'))` 并删除触发代码
- [x] 8.4 如果仅 V1 监听,搜索 `window.dispatchEvent(new Event('transactions-changed'))` 并删除触发代码
- [x] 8.5 如果 V2 也在监听这些事件,保留触发代码并标记为"后续清理"任务
## 9. 前端构建验证
- [x] 9.1 安装依赖 (`cd Web && pnpm install`)
- [x] 9.2 运行 ESLint 检查 (`pnpm lint`)
- [x] 9.3 构建前端项目 (`pnpm build`)
- [x] 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. 代码搜索验证 (确认无遗漏)
- [x] 11.1 全局搜索 `CalendarView` (大小写敏感),确认无残留引用
- [x] 11.2 全局搜索 `BudgetView` (大小写敏感),确认无残留引用
- [x] 11.3 全局搜索 `statisticsV1` (大小写敏感),确认无残留引用
- [x] 11.4 全局搜索 `GetDailyStatistics` (TransactionRecordController),确认仅 TransactionStatisticsController 中存在
- [x] 11.5 全局搜索 `GetUncoveredCategories`,确认无残留引用
- [x] 11.6 全局搜索 `GetArchiveSummary`,确认无残留引用
- [x] 11.7 全局搜索 `GetBalanceStatistics`,确认无残留引用
- [x] 11.8 全局搜索 `/calendar` 路由,确认仅出现在测试或配置文件中
- [x] 11.9 全局搜索 `/budget` 路由,确认仅出现在测试或配置文件中
## 12. 测试用例清理
- [x] 12.1 搜索并删除 `WebApi.Test/` 中针对 V1 API 的单元测试
- [x] 12.2 运行所有后端测试 (`dotnet test`),确保无失败测试
- [x] 12.3 如果有前端测试,运行并修复受影响的测试用例
## 13. 代码审查和提交
- [x] 13.1 使用 `git status` 确认所有修改的文件
- [x] 13.2 使用 `git diff` 审查每个删除的代码块,确认无误删
- [x] 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 的使用数据优化接口和前端渲染逻辑