fix(migrations): 已应用的迁移文件不能删除(否则服务起不来)
上一轮纠偏时我把迁移 096(`claim_submission_json`)从文件系统删掉了,只留新的 097 去 DROP 列。 结果 `node-pg-migrate` 的排序校验直接拒绝启动: Not run migration 097_drop_claim_submission is preceding already run migration 096_... 因为数据库里已记录 096 已执行、而文件系统里没有它。后端因此进入重试循环、`/health/ready` 一直 503 (生产同样会中招,属于启动阻塞)。 正确做法:**保留 096 文件**(结构演进留在历史里),用 097 承担「删列」这一步; 两边的 `schema_migrations` 记录都完整,已应用 096 的环境与全新库都能正常迁移。 同时**还原 `check-sql-guard.ts` 为严格版**:既然不需要删迁移了,就不该放宽守卫 (原规则「历史迁移只能新增、不可修改/删除」继续生效,实测通过)。 实测:恢复后启动日志正常执行 `097_drop_claim_submission (UP)`、`/health/ready` 200、 `fulfillment_tasks.claim_submission_json` 已删除;`npm run check` 671/668/0 全绿。
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
-- 096_fulfillment_tasks_claim_submission.sql —— 皮肤自动发货「买家领取页」提交内容落库。
|
||||
--
|
||||
-- 背景:抖音码速达的皮肤类商品改为「自动发货 + 领取链接」,买家在 /claim-skin/:token
|
||||
-- 提交游戏账号后,我们要把账号存下来交给运营发货(并防重复提交)。
|
||||
--
|
||||
-- 为什么单开一列而不是塞进 work_orders.material_json:
|
||||
-- material_json 是发给打手的工单素材(还挂了搜索索引与统计),买家游戏账号属于隐私数据,
|
||||
-- 写进去等于对外泄露(仓库既有隐私红线,见 douyin-mashida/order-mapper.ts 的 buyerWords 注释)。
|
||||
-- fulfillment_tasks 只被履约/后台读取,工单侧(worker-platform)明确不 JOIN 该表,
|
||||
-- 因此把账号留在任务自身上是最小暴露面的做法。
|
||||
--
|
||||
-- 幂等:全部 IF NOT EXISTS。
|
||||
|
||||
ALTER TABLE fulfillment_tasks
|
||||
-- 买家领取页提交内容:{"gameAccount":"...","submittedAt":"...","source":"claim_skin"};
|
||||
-- 空对象 {} 表示尚未提交(待领取)。
|
||||
ADD COLUMN IF NOT EXISTS claim_submission_json JSONB NOT NULL DEFAULT '{}'::jsonb;
|
||||
|
||||
COMMENT ON COLUMN fulfillment_tasks.claim_submission_json IS
|
||||
'买家领取页提交内容(gameAccount/submittedAt);隐私字段,禁止写入 work_orders.material_json';
|
||||
Reference in New Issue
Block a user