27 lines
1.9 KiB
SQL
27 lines
1.9 KiB
SQL
-- SendGift V2 需要把首次成功结果和扣款后的恢复状态固化在 room-service owner 库。
|
||
-- 线上先执行该迁移再发布新 room-service;旧版本不会读取新增列和表,迁移可向前兼容。
|
||
ALTER TABLE room_command_log
|
||
ADD COLUMN result_payload LONGBLOB NULL COMMENT '首次提交的 typed 结果,用于幂等原样重放' AFTER payload;
|
||
|
||
CREATE TABLE IF NOT EXISTS room_gift_operations (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
|
||
command_id VARCHAR(128) NOT NULL COMMENT '送礼全链路幂等 ID',
|
||
actor_user_id BIGINT NOT NULL COMMENT '送礼用户 ID',
|
||
command_payload LONGBLOB NOT NULL COMMENT '规范化 Room 命令,供载荷冲突校验',
|
||
request_payload LONGBLOB NOT NULL COMMENT '原始 SendGiftRequest protobuf,供服务端恢复',
|
||
status VARCHAR(32) NOT NULL COMMENT 'pending/debited/drawn/committed/compensated',
|
||
billing_payload LONGBLOB NULL COMMENT '钱包稳定回执 protobuf',
|
||
lucky_payload LONGBLOB NULL COMMENT '幸运礼物聚合结果 protobuf',
|
||
result_payload LONGBLOB NULL COMMENT '首次提交的 SendGiftResultV2 protobuf',
|
||
last_error TEXT NULL COMMENT '最近一次恢复错误',
|
||
retry_count INT NOT NULL DEFAULT 0 COMMENT '服务端恢复次数',
|
||
next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下次允许恢复时间,UTC epoch ms',
|
||
worker_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前恢复 worker',
|
||
lock_until_ms BIGINT NULL COMMENT '恢复租约截止时间,UTC epoch ms',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, room_id, command_id),
|
||
KEY idx_room_gift_operation_recovery (status, next_retry_at_ms, lock_until_ms, updated_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='送礼跨钱包抽奖和房间提交 Saga';
|