-- =============================================================
-- Migration: 20260423__ai_cache_allow_app2a.sql
-- Purpose:   放开 biz.ai_cache.chk_ai_cache_type CHECK 约束，
--            允许新 cache_type 'app2a_finance_area'（app2a 区域财务洞察）
-- Related:   docs/ai/app2_finance_multi_app_design.md v2 · Phase F
-- Author:    Claude + Neo
-- =============================================================
--
-- 改动说明：
--   1. DROP 旧 CHECK 约束 chk_ai_cache_type
--   2. CREATE 新 CHECK 约束，加入 'app2a_finance_area' 值
--
-- 兼容性：
--   - 旧 cache_type 值全部保留，仅新增一个允许值
--   - 无需数据迁移
--
-- 回滚策略：
--   见文件末 ROLLBACK 段
--
-- 验证 SQL：
--   见文件末 VERIFICATION 段
-- =============================================================

BEGIN;

-- 1. DROP 旧约束
ALTER TABLE biz.ai_cache DROP CONSTRAINT IF EXISTS chk_ai_cache_type;

-- 2. CREATE 新约束（加入 app2a_finance_area）
ALTER TABLE biz.ai_cache ADD CONSTRAINT chk_ai_cache_type
  CHECK (cache_type IN (
    'app2_finance',
    'app2a_finance_area',  -- 2026-04-23 新增（区域财务洞察 · 64 组合）
    'app3_clue',
    'app4_analysis',
    'app5_tactics',
    'app6_note_analysis',
    'app7_customer_analysis',
    'app8_clue_consolidated'
  ));

COMMIT;

-- =============================================================
-- VERIFICATION（事后手工执行）
-- =============================================================
-- 1. 约束允许值检查
--   SELECT pg_get_constraintdef(oid)
--     FROM pg_constraint
--    WHERE conname = 'chk_ai_cache_type';
--   -- 期望：返回的 CHECK 里包含 'app2a_finance_area'
--
-- 2. 插入新 cache_type 应成功
--   INSERT INTO biz.ai_cache (cache_type, site_id, target_id, result_json, status, expires_at)
--   VALUES ('app2a_finance_area', 1, 'test__all', '{}', 'valid', NOW() + INTERVAL '1 day');
--   -- 期望：成功插入
--   DELETE FROM biz.ai_cache WHERE cache_type = 'app2a_finance_area' AND site_id = 1 AND target_id = 'test__all';

-- =============================================================
-- ROLLBACK
-- =============================================================
-- BEGIN;
-- ALTER TABLE biz.ai_cache DROP CONSTRAINT IF EXISTS chk_ai_cache_type;
-- ALTER TABLE biz.ai_cache ADD CONSTRAINT chk_ai_cache_type
--   CHECK (cache_type IN (
--     'app2_finance', 'app3_clue', 'app4_analysis', 'app5_tactics',
--     'app6_note_analysis', 'app7_customer_analysis', 'app8_clue_consolidated'
--   ));
-- COMMIT;
-- 注：回滚前必须先 DELETE 所有 cache_type = 'app2a_finance_area' 的记录，否则 CHECK 会失败
