8fba080d20
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
5.3 KiB
5.3 KiB
pay v2 支付+订单 — 自动开发决策日志
2026-07-11 起,自动模式落地。用户明早 double check。每个决断记这里。
背景
用户指令:把今天设计的支付/订单功能全部落成真实代码(Flutter + Go),前后端测试,增量提交,自行决断,留记录。
最终 UX 模型(prototype 已定稿)
- 购买页一个支付渠道 segswitch:默认 USDT→加密货币,可切 人民币→支付宝。渠道=币种=方式,一步定,无弹层。
- 套餐价随渠道切换(一口价不换算):月 ¥29.99/$4.99 · 季 ¥68.88/$12.99 · 年 ¥199.99/$34.99。
- 买完直达支付页:crypto=USDT 地址+精确金额;alipay=桌面二维码/移动拉起 App。
- 订单:列表→详情,状态 pending/paid/settled/expired。
- nezha(哪吒)已从购买流程移除。
决策日志
- [step0] prototype 支付渠道 switch 收口(3 屏 +
.segswitch原子入真相源+登记)。→ 提交后进开发。
[step1] prototype 支付渠道 switch 收口(2026-07-11)
.segswitch原子入 atoms.css + 登记 index.html;purchase.html/ui-mobile/ui-desktop 三屏改成购买页渠道 switch(默认 USDT→crypto / 人民币→alipay),删两步弹层 + nezha。- 闸全绿:check-ds 5 项 / check-l1-sync(58 图标 + 190 l10n×6)。
[step2] 服务端 pay orders + 分币种 catalog(2026-07-11)
- catalog.go:
CatalogItem.PriceUsdtMicro(USDT 展示价,一口价)+SettlementCurrency/DisplayAmountMinorhelper(crypto→USDT / 法币→CNY)。 - store.go:
PurchaseRow.CreatedAt;Insert增 amount/currency 参(下单落展示金额,webhook 覆盖实际);新增ListByUser。 - handler.go:新增
List(GET /v1/pay/orders,纯本地台账倒序)+orderView富字段;GetOrder详情回带 sku/plan/method/amount/currency/created_at/paid_at;下单按方式落展示金额。 - main.go:注册
GET /v1/pay/orders。 - 测试:新增 List 越权/倒序/富字段、下单展示金额分币种、详情富字段;修 3 个 pre-existing 迁移测试(renumber 21→23 遗留)。
go test ./...全绿。 - 决策:USDT 展示价放服务端 catalog($4.99/$12.99/$34.99),客户端 switch 直接读,不硬编码;实际扣款仍以 pay 侧为准。
[step3] 客户端 Flutter 落地(2026-07-11)
- 探查结论:购买/支付主干已存在(Riverpod + payment_api + payment_page 多态渲染);缺订单列表/详情整链 + 购买页 segswitch/分币种。
- 锁定共享契约(主 agent 手写,防并行冲突):
- models/payment.dart:
PayChannel{usdt,cny}(.currency/.method);PayCatalogItem.priceUsdtMicro+priceLabel(ch)/perMonthLabel(ch)/months(priceLabel 改带参);新PayOrderSummary;PayOrderStatus.summary富字段。 - payment_api.dart:
listOrders()。 - l10n:+19 getter(支付渠道 switch 4 + 订单 15)×6 语言,l10n 闸绿(209×6)。
- StatusPill 复用(created→connecting/等待付款、paid→connected/已开通、canceled→neutral/已取消)。
- models/payment.dart:
- 两 agent 并行建屏:A=SegSwitch widget + purchase_page 重构(渠道 switch 置顶、分币种价、删底部弹窗) + payment_page 订单卡;B=orders_provider + orders_page(列表+详情) + 导航(NavView.orders + desktop_shell + account 入口)。
- 决策:USDT 展示价由服务端 catalog 下发(不客户端硬编码);「继续支付」MVP 走购买页重下单(retry-resume 列为后续)。
[step4] 集成 + 测试 + 提交(2026-07-12)
- 整体
flutter analyze0 error(3 个 pre-existing info:withOpacity×2 + unused import)。 flutter test226 全绿:修 priceLabel 带参、假 API 补 listOrders、购买页测改成默认 USDT+切 CNY 断言、新增订单列表/空态/详情测试、golden 重录(icon 迁移+账户订单入口+连接键 loader)。- 服务端
go test ./...全绿。 - l10n 19 getter ×6 语言补 @override,check-l1-sync 绿(209×6)。check-ds 绿。
- 提交:a5adbf3 server /
f6ce526design /272eca0client。→ push + draft PR。 - 遗留(非阻塞,明日可议):订单「继续支付」走重新下单(非 retry-resume);订单无 expired 本地态;
local-l13-start.sh是本地联调脚本(含 throwaway 密钥)不入 git。
[step5] 账户 IA 重构落地 + 订单过期态(2026-07-12,SDD 执行)
- 计划
docs/superpowers/plans/2026-07-12-account-ia-reorg.md,9 任务 SDD(每任务实现+审查+修)全过。 - 后端(Task 0):订单展示层过期态(created 超 30min TTL → orderView.Status=expired,零迁移),go test 绿。
- 前端(Task 1-7.5):NavView 加 invite/notifications;l10n +21 getter×6;联系渠道单源+Redeem 删去哪买;账户页重排+邀请入口+删偏好卡+formFactor 门控+InviteScreen 占位;桌面侧栏加 Account 一级+顶栏通知铃铛+NotificationBell;通知占位屏+移动铃铛;设置页归连接/外观/关于三组+Web 下沉;订单页 expired pill。
- 验收:flutter analyze 0 error;flutter test 232 全绿(7 desktop golden 因 IA 改壳重录);check-ds/check-l1-sync(59图标+230×6 l10n)绿;server go test 绿。
- 待:server 重编部署 pangolin1(Task0 生效)+ 终审 + Windows 编译测试。
- 遗留(终审triage):ContactChannel 死 class / chEmail·buyTitle·buySub 孤立 l10n / _SectionLabel 双份 —— 均 Minor。