All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
30 lines
1.6 KiB
Markdown
30 lines
1.6 KiB
Markdown
## Context
|
||
|
||
step2 套餐使用 SQL 已从 `tb_package` 读取流量、名称及价格配置快照,但遗漏计时条款快照列;新记录因此使用表默认空值和零值,触发数据库完整性校验失败。
|
||
|
||
## Goals / Non-Goals
|
||
|
||
**Goals:**
|
||
- 从 SQL 已连接的目标套餐行直接写入四个计时条款快照。
|
||
- 保持现有套餐选择、状态、优先级和冲突幂等键不变。
|
||
|
||
**Non-Goals:**
|
||
- 不修改套餐使用表、触发器或历史记录。
|
||
- 不推断或修正目标套餐自身的计时条款配置。
|
||
|
||
## Decisions
|
||
|
||
- 在 `INSERT` 列表和对应 `SELECT` 中加入 `p.expiry_base`、`p.calendar_type` 及按周期类型规范化后的时长快照:`natural_month` 保留 `p.duration_months` 并写零天数,`by_day` 保留 `p.duration_days` 并写零月数。这与正常下单的领域快照规则一致;目标套餐的非适用时长字段不进入使用记录快照。
|
||
- 不在 SQL 使用 `COALESCE` 或常量兜底有效时长。目标套餐配置无效时应由数据库完整性约束拒绝,不能静默写入错误快照。
|
||
|
||
## Risks / Trade-offs
|
||
|
||
- [目标套餐存在无效计时配置] → SQL 将被触发器拒绝;在正式执行前用隔离数据库检查生成 SQL,并修正目标套餐配置。
|
||
- [执行旧生成文件] → 仍会失败;必须重新生成并替换 `step2_02_package_usages.sql`。
|
||
|
||
## Migration Plan
|
||
|
||
1. 修改生成器并重新生成 step2 输出。
|
||
2. 在隔离环境执行新的套餐使用 SQL,确认无快照触发器错误。
|
||
3. 维护者在生产环境按事务执行新生成文件;失败时事务自动回滚,无需数据回滚。
|