-- ============================================================================
-- P3·3b-A 派发面 e2e·发布翻转（把 gameId=9302 的 feed 卡翻到【回调链新建的】version）
-- 缘由：回调链 handleCallback 建【新】version(N)+runtime_package(engineBundle=stub 回的 pong)，但
--       新 runtime_package 落库 status=0（未发布），且 project.current_version_id/feed_rank 仍指占位 93020。
--       本脚本把三处翻到回调新版本 N，使 feed 服务【回调链产物】(=派发面真产物)，证 plumbing 闭环。
-- 自动选 N：gameId=9302 下 gen_task_id 非空（=回调建的，占位 93020 的 gen_task_id 为 NULL）的最新 version。
-- 幂等：纯 UPDATE 翻指针，可重复执行（再跑选同一 N）。
-- 用法：docker exec -i game-staging-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" < 本文件
-- ============================================================================
USE `ruoyi-vue-pro`;
SET NAMES utf8mb4;

START TRANSACTION;

-- 选回调新建的最新 version N（gen_task_id 非空 = 回调链建的；占位 93020 gen_task_id 为 NULL 被排除）
SET @vid := (SELECT id FROM game_version
             WHERE game_id = 9302 AND gen_task_id IS NOT NULL AND deleted = b'0'
             ORDER BY id DESC LIMIT 1);

-- 防御：未找到回调新版本则不翻（保持占位态，避免把 feed 指向不存在版本）
-- （@vid 为 NULL 时下方 UPDATE 的 WHERE 不命中任何行，安全空操作）

-- ① 把回调新版本对应的 runtime_package 发布（status 0→1）；占位 93020 包仍在但不再被 feed 指
UPDATE game_runtime_package SET status = 1, updater = 'p3b-flip', update_time = NOW()
  WHERE game_id = 9302 AND version_id = @vid AND @vid IS NOT NULL;

-- ② project.current_version_id 指向回调新版本 N
UPDATE game_project SET current_version_id = @vid, updater = 'p3b-flip', update_time = NOW()
  WHERE id = 9302 AND @vid IS NOT NULL;

-- ③ feed_rank.version_id 指向回调新版本 N（feed 卡 /play 取此 version 的包 = 回调产物 pong）
UPDATE game_feed_rank SET version_id = @vid, updater = 'p3b-flip', update_time = NOW()
  WHERE game_id = 9302 AND @vid IS NOT NULL;

COMMIT;

-- 回读：翻转后的指针 + 新版本运行包态（@vid 即 feed 现服务的 versionId，供 CDP driver 用）
SELECT @vid AS flipped_version_id;
SELECT 'project.current_version' k, current_version_id v FROM game_project WHERE id=9302
UNION ALL SELECT 'feed_rank.version', version_id FROM game_feed_rank WHERE game_id=9302
UNION ALL SELECT 'new_pkg.status', status FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid
UNION ALL SELECT 'new_pkg.bundleSize', bundle_size FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid;
-- 校验 engineBundle 真入包（LENGTH>0 = 回调把 pong bundle 落进 package_json）
SELECT 'engineBundle_in_pkg_len' k,
       CHAR_LENGTH(JSON_UNQUOTE(JSON_EXTRACT(package_json, '$.engineBundle'))) v
  FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid;
-- 校验 checksum 自洽（列值 == 对所存 package_json 重算的 sha256）——宿主完整性校验链不变量
SELECT 'checksum_selfconsistent' k,
       (checksum = LOWER(SHA2(package_json, 256))) v
  FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid;
