Files
vmall/openspec/MIGRATION-PLAN.md
T

5.0 KiB
Raw Blame History

Tigshop → VMall Migration Plan

临时跟踪文档:每实现并验证一个 change(tasks 全勾、openspec archive 完成、openspec validate --all --strict 全绿)后,更新本文档状态表。8 个 change 全部归档后删除本文件。

来源:对 /Users/chengdzhang/github/jamyun/tigshop(Admin + Uniapp + PHP 后端)的只读盘点。迁移的是领域模型与信息架构,不是代码。

明确排除(不迁移)

  • 微信小程序专属能力(wx.login / requestPayment / 订阅消息 / 分享 / 企业客服)
  • 供应商(vendor)三层体系 —— 架构级决策,非功能迁移
  • 分销(tigshop 自身半成品)、完整拖拽装修器、电子卡密/虚拟商品、直播、打印、内置 IM

交接说明(handoff)

进度:Wave 1 完成(P6/P0/P2/P1 已归档)。剩 P3、P5、P7(Wave 2)、P4(Wave 3)。 下一个建议:P3 add-wallet-settlement(P0 已归档,硬依赖解除)。

工作流约定(用户明确要求):一次只实现一个 change,完成后停下来等人工 review;可以提议下一个,但不要自动连续实施,除非明确要求连续执行。

实施要点:

  • 下一个可用迁移号:0019(0016 aftersales / 0017 freight / 0018 reviews 已占用)。各 proposal tasks.md 里的迁移号是提议时抢占的(P3 写 0018/0019、P5/P7 写 0016/0017),实施时以实际顺序重编号。
  • 文档与索引已就位:改代码前先查 docs/code_index/index.md;docs/backend-guidelines.md 有并发/状态机模式与 PG 陷阱;docs/design-guidelines.md 管 UI;增删文件要同步索引。
  • 前端派发模式已验证:我(主线)做迁移+共享契约+Rust 模块+集成测试,然后按 app 并行派三个子任务(mall/shop-admin/admin)写页面,主线统一构建+smoke+归档。

踩过的坑(别再踩):

  • SUM(bigint) 在 Postgres 返回 NUMERIC,解码 i64 前必须 COALESCE(SUM(x),0)::bigint(售后曾因此 500)。
  • sqlx 运行时解码:cargo check 绿不代表 SQL 对——加列要同步所有列清单常量与 INSERT 的列数/参数数。
  • 外币订单退款:客户无该币种账户会失败,用 account::service::ensure_monetary_account 懒建(已存在)。
  • 共享契约改动要同时改 interface 和 createApi 实现两处;mall 还要 mock 实现 + LIVE_PICKS 精确挑方法(漏挑会静默落回 mock)。
  • dev server:pnpm build 后要 rm -rf apps/<app>/.nuxt 再 dev;dev 绑 IPv6 localhost;页面卡 Loading 无报错=旧 tab 拿旧 chunk hash,重启+开新 tab。
  • 测试库迁移校验和冲突(改了已应用的本地迁移):DROP SCHEMA public CASCADE; CREATE SCHEMA public;(vmall_test)。

依赖图

P6 content-admin-ui ──┐(无依赖,热身)
P1 product-reviews ───┤(无依赖,可并行)
P5 onboarding ────────┤(无依赖,可并行)
P7 membership ────────┤(无依赖,可并行)
                      │
P0 aftersale ─────────┤
   │                  │
   ├─→ P3 wallet-settlement(结算需扣减退款,硬依赖 P0 的 aftersales 表)
   │        │
   └────────┴─→ P4 mobile-h5(售后/钱包页面消费 P0/P3 API;核心链路只依赖现有 API,可与 P3 并行起步)
P2 freight ───────────┘(改 checkout/order totals,与 P0 同触 order 模块,建议与 P0 串行)

推荐实施波次

波次 Changes 说明
Wave 1 P6 → P0 → P2 → P1 P6 热身(纯前端);P0/P2 都动 order 模块故串行;P1 任意位置插入
Wave 2 P3、P5、P7 P3 必须在 P0 归档后启动;P5/P7 随时可插
Wave 3 P4 移动 H5 收尾,消费前面所有 API;P0/P3 未完成时对应页面降级 Coming soon

状态跟踪

# Change 依赖 状态 归档日期
P0 add-aftersale-refunds — archived 2026-09-23
P1 add-product-reviews — archived 2026-09-24
P2 add-freight-templates —(与 P0 串行) archived 2026-09-24
P3 add-wallet-settlement P0 proposed —
P4 add-mobile-h5 P0、P3(软) proposed —
P5 add-merchant-onboarding — proposed —
P6 add-content-admin-ui — archived 2026-09-23
P7 add-membership-messaging — proposed —

状态取值:proposed → implementing → verified(tasks 全勾 + 测试/构建/smoke 通过)→ archived。

更新规则

  1. 开始实现某 change:状态改 implementing。
  2. 实现并验证完成(含 cargo test -p vmall-api 连跑两次全绿、受影响前端 build、浏览器 smoke):状态改 verified。
  3. openspec archive <name> --yes 且 openspec validate --all --strict 全绿:状态改 archived,填归档日期。
  4. 实施中发现新的跨 change 依赖:先更新本文件依赖图,再继续。
  5. 全部 archived 后:删除本文件。