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

21 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 集成测试覆盖正常新购、平台与代理下架续费、伪造续费字段、展示后事实变化、当前价格、组合规则、实名、并发重复提交和事务失败不留部分订单。