2.4 KiB
2.4 KiB
invoicePool 路由拆分方案(P9A1)
1. 背景
- 现状:
server/src/routes/invoicePool.js超过 2700 行,上传、列表、详情、验真、归档、解绑、OCR 重试等职责集中在单文件。 - 风险:
- 验真链路迭代时容易与票据主流程互相影响。
select片段与响应映射逻辑重复,字段漂移不易发现。- 新人接手定位成本高,回归面过大。
2. 目标与非目标
- 目标:
- 不改变现有 API 路径、权限码、响应结构。
- 将验真端点独立到子模块,主文件保留入口职责。
- 抽取 shared
select/mapper,降低重复与字段遗漏风险。
- 非目标:
- 不新增业务功能。
- 不调整数据库模型与外部接口契约。
3. 拆分边界冻结
3.1 保留在 invoicePool.js 的能力
- 票据列表、上传、详情、编辑、归档、解绑、OCR 重试、判重例外、签名 URL 与文件读取。
- 入口职责:对外仍由
server/src/routes/invoicePool.js注册全部/api/invoice-pool/*路径。
3.2 独立模块
server/src/routes/invoicePool/verification.jsPOST /invoice-pool/:id/verifyGET /invoice-pool/:id/verificationPOST /invoice-pool/:id/verification/retry
3.3 shared 模块
server/src/routes/invoicePool/shared/selects.js- 统一
verification_records子查询。 - 提供列表/详情
selectbuilder。
- 统一
server/src/routes/invoicePool/shared/mappers.jsmapVerificationRecordmapInvoiceSummarynormalizeInvoiceResponse
server/src/routes/invoicePool/shared/schemas.js- 验真列表查询参数解析。
server/src/routes/invoicePool/shared/helpers.js- 验真任务触发(
pg-boss/inline 兼容)。
- 验真任务触发(
4. 迁移顺序
- 新增 shared 模块与
verification.js,逻辑先保持等价迁移。 invoicePool.js改为组合注册(调用verification.js),删除内联验真端点。- 将列表与详情相关查询切换到 shared
selectbuilder。 - 执行静态检查与验真回归脚本,确认无接口行为变化。
5. 兼容性与回滚
- 兼容性:
- 路由路径、权限码、返回字段保持不变。
- 错误码(
VALID_001/PERM_001/SYS_404)保持原语义。
- 回滚策略:
- 保留
invoicePool.js入口文件与原有注册顺序。 - 如发现回归,可将
verification.js调用回切为原文件内联实现(无 schema 变更,无数据回滚)。
- 保留