-- =========================================================================
-- 迁移历史 squash 元数据迁移（issue #213）
--
-- 在每个**已部署**环境（dev/UAT/staging/PRD）执行一次：
-- 把 _prisma_migrations 表里 68 条历史迁移记录替换为 1 条 baseline 记录。
-- 不动业务表数据，只动 Prisma 元数据。
--
-- 执行方式：
--   docker exec -i <postgres-container> psql -U <user> -d <db> \
--     -v ON_ERROR_STOP=1 -f apply-squash.sql
--
-- 失败回滚：
--   先用阶段 2.1 的 backup-prisma-mig-<env>-<ts>.sql 恢复 _prisma_migrations 表，
--   然后 git revert squash PR；详见 scripts/ops/squash/rollback.sql 模板。
-- =========================================================================

\set ON_ERROR_STOP on
BEGIN;

DO $$
DECLARE
  total_rows int;
  distinct_names int;
  baseline_present int;
BEGIN
  SELECT count(*) INTO total_rows FROM _prisma_migrations;
  SELECT count(DISTINCT migration_name) INTO distinct_names FROM _prisma_migrations;
  SELECT count(*) INTO baseline_present FROM _prisma_migrations
    WHERE migration_name = '00000000000000_baseline_squash';

  RAISE NOTICE 'pre-squash: total_rows = %, distinct_names = %', total_rows, distinct_names;

  IF baseline_present > 0 THEN
    RAISE EXCEPTION 'baseline_squash 已存在，本环境已迁移过；中止';
  END IF;

  -- squash 是元数据替换，不依赖固定历史条数：
  -- UAT/PRD 实测 _prisma_migrations 有 `migrate resolve --applied` 留下的重复行
  -- （同一 migration_name 多条记录），distinct 数也可能因 develop 删过 mig 而 < 当前
  -- archive 数。只要不为空且未 squash 过即可继续。
  IF total_rows = 0 THEN
    RAISE EXCEPTION '_prisma_migrations 为空（环境未跑过任何迁移？）；中止';
  END IF;
END $$;

DELETE FROM _prisma_migrations;

INSERT INTO _prisma_migrations
  (id, checksum, finished_at, migration_name, started_at, applied_steps_count, rolled_back_at, logs)
VALUES (
  gen_random_uuid()::text,
  'f62f54815f8c4dd8ac5c7309eebb0fc36d17ccf8739188a3dac0ed9248309307',
  NOW(),
  '00000000000000_baseline_squash',
  NOW(),
  1,
  NULL,
  NULL
);

DO $$
DECLARE
  new_count int;
BEGIN
  SELECT count(*) INTO new_count FROM _prisma_migrations;
  IF new_count <> 1 THEN
    RAISE EXCEPTION '预期 squash 后 1 条迁移，实际 %；中止', new_count;
  END IF;
  RAISE NOTICE '✅ squash 完成：_prisma_migrations 现仅含 baseline_squash';
END $$;

COMMIT;
