Files
SunCheng c49f66757e
Some checks failed
Docker Build & Deploy / Build Docker Image (push) Waiting to run
Docker Build & Deploy / Deploy to Production (push) Has been cancelled
Docker Build & Deploy / Cleanup Dangling Images (push) Has been cancelled
Docker Build & Deploy / WeChat Notification (push) Has been cancelled
1
2026-02-18 21:16:45 +08:00

5.2 KiB
Raw Blame History

REMOVED Requirements

Requirement: Get Uncovered Categories

Reason: 该接口仅被 V1 预算页面使用,用于展示"未设置预算的分类"。V2 预算页面不包含此功能。
Migration: 如需在 V2 中实现类似功能,应重新设计并创建新接口。当前无直接迁移路径。

原有功能:

  • 接口: GET /api/Budget/GetUncoveredCategories
  • Controller: BudgetController.GetUncoveredCategoriesAsync
  • 参数: category (enum: Expense/Income/Saving), date (DateTime)
  • 返回: List<string> (未设置预算的分类名称列表)
  • 业务逻辑:
    1. 查询指定月份的所有交易记录,提取所有出现的分类
    2. 查询指定月份已设置预算的分类
    3. 计算差集,返回"有交易但未设置预算"的分类列表

被以下代码调用:

  • Web/src/views/BudgetView.vue 中的 fetchUncoveredCategories 方法
  • Web/src/api/budget.js 中的 getUncoveredCategories 函数

Requirement: Get Archive Summary

Reason: 该接口仅被 V1 预算页面使用,用于展示"历史预算归档总结"。V2 预算页面不包含此功能。
Migration: 如需在 V2 中实现类似功能,应重新设计并创建新接口。当前无直接迁移路径。

原有功能:

  • 接口: GET /api/Budget/GetArchiveSummary
  • Controller: BudgetController.GetArchiveSummaryAsync
  • 参数: date (DateTime, 用于指定查询的年月)
  • 返回: ArchiveSummaryDto (包含归档总结数据)
  • 业务逻辑:
    1. 查询 BudgetArchive 表中指定月份的归档记录
    2. 汇总支出、收入、存款的预算执行情况
    3. 返回总结数据(如预算达成率、超支分类等)

被以下代码调用:

  • Web/src/views/BudgetView.vue 中的 showArchiveSummary 方法
  • Web/src/api/budget.js 中的 getArchiveSummary 函数

Context

本规范定义了 EmailBill 后端 BudgetController 中两个 V1 专用接口的移除操作。

接口背景

这两个接口是 V1 预算页面的特色功能:

  1. 未覆盖分类提示: 帮助用户发现"有交易但未设置预算"的分类,提醒用户完善预算设置
  2. 归档总结: 展示历史月份的预算执行总结,帮助用户回顾过去的财务状况

V2 设计变更

V2 预算页面重新设计了用户体验,移除了上述两个功能:

  • 未覆盖分类: V2 采用"按需创建预算"模式,不主动提示未覆盖分类
  • 归档总结: V2 使用实时统计替代归档总结,用户可随时查看任意月份的预算执行情况

技术依赖

这两个接口依赖以下 Service 和 Repository

  • BudgetService.GetUncoveredCategoriesAsync
  • BudgetService.GetArchiveSummaryAsync
  • BudgetRepository
  • BudgetArchiveRepository
  • TransactionRecordRepository

移除接口后,相关 Service 方法也将被移除(见 budget-service 规范)。


Validation

验证标准

  1. 代码搜索验证:

    • 全局搜索 GetUncoveredCategories,确认仅在以下位置出现:
      • BudgetController.GetUncoveredCategoriesAsync (待删除)
      • BudgetApplication.GetUncoveredCategoriesAsync (待删除)
      • BudgetService.GetUncoveredCategoriesAsync (待删除)
      • BudgetView.vue (已删除)
      • budget.js (已清理)
    • 全局搜索 GetArchiveSummary,确认仅在 V1 相关代码中出现
  2. 编译验证:

    • 删除 BudgetController 中的两个方法后,后端项目编译通过
    • 删除 BudgetApplicationBudgetService 中的对应方法后,编译通过
  3. API 文档验证:

    • Swagger/Scalar 文档中不再显示以下端点:
      • /api/Budget/GetUncoveredCategories
      • /api/Budget/GetArchiveSummary
  4. 运行时验证:

    • 前端调用上述端点返回 404
    • V2 预算页面 (/budget-v2) 正常加载和操作,不受影响

Dependencies

移除这两个接口的前置条件:

  1. BudgetView.vue (V1 预算页面) 已删除
  2. Web/src/api/budget.js 中的 getUncoveredCategoriesgetArchiveSummary 方法已清理
  3. V2 预算页面已验证不依赖这两个接口

移除后连带删除:

  • BudgetApplication.GetUncoveredCategoriesAsync
  • BudgetApplication.GetArchiveSummaryAsync
  • BudgetService.GetUncoveredCategoriesAsync
  • BudgetService.GetArchiveSummaryAsync

移除后不影响:

  • 其他预算相关接口 (GetList, GetCategoryStats, Create, Update, Delete 等)
  • BudgetRepositoryBudgetArchiveRepository 的查询逻辑 (仍被其他接口使用)
  • V2 预算页面的任何功能

Notes

功能对比表

功能 V1 实现 V2 实现
未覆盖分类提示 专用接口 GetUncoveredCategories 无(按需创建预算)
归档总结 专用接口 GetArchiveSummary 实时统计 GetCategoryStats
预算列表 GetList GetList (共用)
分类统计 GetCategoryStats GetCategoryStats (共用)

潜在影响

如果未来需要在 V2 中恢复"未覆盖分类"或"归档总结"功能:

  1. 不能直接恢复删除的代码,因为业务逻辑可能已过时
  2. 应重新设计接口,考虑 V2 的数据模型和用户体验
  3. 建议先调研用户需求,确认是否真的需要这些功能