2.7 KiB
2.7 KiB
05 — 套餐激活与队列接续只消费购买快照
What to build: 套餐首次激活、实名后激活、前一主套餐结束后的排队接续及退款后的下一套餐接续,都只使用套餐使用记录保存的购买快照决定起算条件和周期时长。历史旧记录缺少快照时可以通过明确、可观测的兼容路径继续运行;UR#55 上线后产生的新记录缺少快照则被识别为数据异常,不能静默读取可变套餐配置。
Blocked by:
.scratch/ur55-package-expiry-base/issues/03-snapshot-synchronous-package-purchases.md— 03 — 同步购买链路创建不可变套餐计时快照.scratch/ur55-package-expiry-base/issues/04-snapshot-auto-purchase-package-usages.md— 04 — 自动购包链路复用不可变套餐计时快照
Status: completed
- 架构主通道为复杂写,Infrastructure 负责历史数据读取和可观测设施;完整收口套餐激活与接续用例,不实现 UR#46 最终到期展示、UR#33 临期能力或未触碰的套餐管理 CRUD。
- 首次激活、实名后激活、前一主套餐到期后的排队接续和退款后的接续,共享同一套餐生命周期规则,并只从使用记录快照读取生效条件、周期类型、月数和天数。
from_purchase与from_activation的起算语义由使用记录快照决定;购买后修改套餐默认值、周期、时长或分配覆盖,不改变已有记录的激活时间、到期计算或队列接续结果。- 正式主套餐和加油包的激活均消费各自快照;加油包继续遵守既有主套餐关联规则,不借本票改变其生命周期范围。
- 仅 UR#55 上线前形成且快照缺失的历史记录允许显式回退套餐当前值;每次回退都记录可定位使用记录的结构化告警和指标。
- UR#55 上线后形成的新记录缺少或包含非法快照时,必须拒绝或标记异常并告警,不得静默进入历史回退路径。
- 移除触碰用例中直接读取套餐当前
expiry_base、周期或时长的生产分支;不得保留“行业卡永远直接激活”等绕过统一实名规则的特殊判断。 - 重复激活和重复接续通过状态条件保证幂等;事务失败不会留下部分状态、错误到期时间或重复激活下一套餐。
- 领域与集成测试覆盖首次购买即生效、等待实名后生效、连续排队、退款接续、历史回退、新记录缺失快照、重复执行及购买后修改全部相关配置。
- 发布验证遵循“兼容读取应用先就绪,再执行迁移并在同一维护窗口切换所有写入路径”;窗口结束后确认没有新增空快照,并能观测历史回退数量。