Files
order_site/docs/backend-refactor-status.md
T
2026-04-09 12:24:14 +08:00

5.3 KiB

Backend Refactor Status

最后更新:2026-04-09(已切换到“测试数据可丢弃,不做历史迁移兼容”前提)

当前结论

后端正在从“单一腾讯领取兑换工具”迁移到“通用订单履约系统”。

当前代码已经完成了下面两件大事:

  1. 数据层已经切到 PostgreSQL,并引入了新的通用履约模型。
  2. 仓库结构已经分出 db / repositories / services / routes / frontend / deploy 等清晰边界。

当前仍处于新旧架构并存阶段,但已经明确采用下面的推进原则:

  • 现有数据库数据视为测试数据,可直接清空
  • 不再为了旧测试数据保留历史迁移修复逻辑
  • 新配置只认当前履约模型,不再从旧映射自动推导

当前主要表现为:

  • 新 schema 已经使用 fulfillment_* / inventory_items / task_inventory_bindings
  • 核心 service 主链路已经开始直接使用“主 token / 主库存绑定”语义
  • 边角脚本、前端命名和少量后台返回结构仍处于过渡期

当前真实架构

从工程实现视角,当前后端可以按 5 层理解:

  1. 接口层
    • src/routes/
    • 负责接 HTTP 请求、鉴权、组装响应
  2. 应用编排层
    • src/services/order/
    • src/services/claim/
    • src/services/admin/
    • 负责订单、任务、库存、领取、后台操作编排
  3. 执行能力层
    • src/services/session/
    • src/services/platforms/
    • 负责浏览器自动化、平台消息发送、OCR 调用
  4. 持久化层
    • src/repositories/
    • 负责 orders、tasks、inventory、claim_tokens、webhook_events 的读写
  5. 基础设施层
    • src/db/
    • src/config/
    • 负责数据库连接、迁移、运行时配置、bootstrap

已完成部分

1. 通用履约模型已经落库

当前迁移文件已经不再围绕旧式单 CDK 模型设计,而是引入了:

  • fulfillment_profiles
  • fulfillment_profile_requirements
  • sku_fulfillment_bindings
  • inventory_items
  • fulfillment_tasks
  • task_inventory_bindings
  • tencent_browser_contexts
  • message_deliveries

这说明系统底层已经支持:

  • 同一个 SKU 绑定不同履约方式
  • 不同 provider / platform / shop 的差异化履约策略
  • 一个任务绑定多个库存项
  • 不同 credential_type 的库存凭据
  • 手动发货与腾讯领取兑换并存

2. 履约目录 bootstrap 已经具备基础抽象

当前 bootstrap 中已经定义了两个核心 profile:

  • manual_review
  • tencent_claim_redeem

说明“手动发货”和“腾讯领取兑换”已经从业务概念上进入统一履约目录,而不是散落在业务代码里。

3. Admin 路由已经完成按领域拆分

后台路由不再全部堆在一个文件里,而是按:

  • auth
  • dashboard
  • users
  • orders
  • tasks
  • cdks
  • webhook-events
  • platform-config

拆成独立模块,便于继续演进。

4. 核心任务读写已经开始切回新 schema 语义

当前仓库层已经明确暴露:

  • primary_claim_token_*
  • primary_inventory_item_*

应用层也开始改为基于这些字段处理“主领取 token / 主库存绑定”,而不是继续把它们伪装成旧 claim_token_id / reserved_cdk_id

另外,claimed_at / role_confirmed_at / redeemed_at 这些任务时间字段现在也已真正通过 repository 落库,不再只是 service 层表面传值。

当前未完成部分

1. 新 schema 和部分 service 仍然错位

当前最主要的问题不是“没功能”,而是“新数据模型已经落地,但应用层还没有完全跟上”。

典型现象:

  • 前后端接口命名还留着一部分旧 CDK 心智
  • 局部 service 仍需要继续统一 async/await 与新仓库接口写法

2. 多凭据任务能力还没有完全上浮到应用层

底层已经支持一个任务绑定多个库存项,但上层展示和操作仍偏向:

  • 一个任务只看一个预占 CDK
  • 一个任务只暴露一个领取 token
  • 后台仍以单库存项视角管理任务

3. 手动发货 profile 还没有形成完整闭环

当前模型和 bootstrap 已有 manual_dispatch 方向,但完整的手动履约执行链路还没有完全落到 service、admin 操作和结果回写上。

4. repository 与 admin API 之间仍有一层过渡期命名

虽然内部主链路已经开始使用 primary_* 字段,但部分 admin 返回 payload 仍保留 reservedCdkId / claimTokenId 这样的旧命名,以避免前端同时大面积改动。

现在最该继续做的事

  1. 让 admin 层完全对齐新的 fulfillment_tasks / inventory_items 语义
  2. 把“单个 reserved CDK”心智继续升级为“任务库存绑定”
  3. manual_review / manual_dispatch 从 profile 扩展成完整可执行链路
  4. 补一套基于 PostgreSQL 和新 schema 的清库/种子数据脚本

当前这件事已经完成一半:

  • 旧 SQLite 思路的 scripts/cleanup-dev-data.js 已经替换为基于 PostgreSQL 新 schema 的清库脚本
  • 但种子数据脚本还没补,bootstrap 目前主要负责 profile/catalog,不负责完整测试数据生成

文档说明

以下旧文档已删除,不再作为事实来源:

  • apps/backend/方案A-订单编排与自动兑换设计.md
  • apps/backend/阶段1-4实施规格说明.md

后续请以代码、迁移文件和本状态文档为准。