Files
junhong_cmp_fiber/.scratch/ur40-off-shelf-package-renewal/issues/05-client-order-renew-only-write-validation.md
2026-07-22 17:49:25 +09:00

2.7 KiB
Raw Blame History

05 — C 端创建订单按写时事实完成下架续费

What to build: 当前个人客户可以继续使用现有创建订单接口,为自己当前持有资产购买正常在售套餐,或续费同资产、当前世代、同套餐的历史下架套餐。下单始终按最新归属、渠道、历史和价格重新判定,展示后的任何事实变化都会安全拒绝过期资格。

Blocked by: 01 — 建立统一套餐可售决策与真实历史资格

Status: ready-for-agent

架构通道: 主通道为复杂写,现有订单 Application/Service 调用 Domain Policy旧 Service 仅作为当前完整用例的迁移门面。

完整业务边界: 本票收口 POST /api/c/v1/orders/create 的个人客户套餐购买写用例,将下架续费纳入现有订单、支付、实名、幂等和套餐组合流程。明确不新增续费 API、续费订单类型、资格字段、资格缓存或第二套幂等机制不迁移未触碰的后台订单、自动购包、支付回调、退款和佣金流程。

  • 请求继续只接受资产标识、套餐 ID 列表及现有支付相关字段,不新增或信任 renewal、客户 ID、资产类型、店铺、世代、上下架状态或价格字段。
  • 写入前重新解析当前登录客户、资产当前有效绑定、资产类型与 ID、当前 generation、当前销售渠道、套餐、渠道分配、真实历史资格和当前价格不信任查询接口缓存结果。
  • 每一个请求套餐都调用统一策略;正常在售套餐按 normal 继续购买,下架套餐只有个人客户本人在对应资产上得到 renew_only 时通过。
  • 下架续费仍完整执行系列、赠送套餐、主套餐/加油包组合、实名顺序、强充、支付、订单状态和现有创建防重规则,不因历史资格绕过任何既有不变量。
  • 平台自营按当前套餐有效零售价创建价格快照;代理渠道按当前有效分配零售价创建快照并校验不低于授权成本,不读取历史使用记录或历史订单价格。
  • 套餐展示后被禁用或下架、代理分配被禁用/删除、资产解绑或转手、generation 变化、历史退款/失效及价格变为非法时,创建订单按最新事实拒绝并返回统一中文业务错误。
  • 可售结果向后续订单编排保留 purchase_mode、资产世代、套餐、销售渠道和命中历史资格的安全摘要,供成功审计接缝消费,但不向请求方暴露敏感历史明细。
  • 单元及 HTTP/PostgreSQL 集成测试覆盖正常新购、平台与代理下架续费、伪造续费字段、展示后事实变化、当前价格、组合规则、实名、并发重复提交和事务失败不留部分订单。