-- ============================================================================
-- Echo (回声) - Schema 修复迁移脚本
-- 版本: 202601120002
-- 创建日期: 2026-01-12
-- 修复内容:
--   1. user_stamps 表外键添加 ON DELETE CASCADE
--   2. growth_tags 表添加 UPDATE 策略
--   3. achievements 表添加 UPDATE 策略
--   4. daily_stats 表添加 INSERT 策略
--   5. growth_tags 表添加 behavior_tags GIN 索引
-- ============================================================================

-- ============================================================================
-- 修复 1: user_stamps 表外键添加 ON DELETE CASCADE
-- ============================================================================

ALTER TABLE user_stamps DROP CONSTRAINT user_stamps_stamp_def_id_fkey;
ALTER TABLE user_stamps ADD CONSTRAINT user_stamps_stamp_def_id_fkey
    FOREIGN KEY (stamp_def_id) REFERENCES stamp_definitions(id) ON DELETE CASCADE;

-- ============================================================================
-- 修复 2: growth_tags 表添加 UPDATE 策略
-- ============================================================================

-- 检查是否已存在 UPDATE 策略
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_policies
        WHERE tablename = 'growth_tags'
        AND policyname = 'System can update growth tags'
    ) THEN
        CREATE POLICY "System can update growth tags" ON growth_tags
            FOR UPDATE USING (auth.role() = 'service_role');
    END IF;
END $$;

-- ============================================================================
-- 修复 3: achievements 表添加 UPDATE 策略
-- ============================================================================

-- 检查是否已存在 UPDATE 策略
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_policies
        WHERE tablename = 'achievements'
        AND policyname = 'System can update achievements'
    ) THEN
        CREATE POLICY "System can update achievements" ON achievements
            FOR UPDATE USING (auth.role() = 'service_role');
    END IF;
END $$;

-- ============================================================================
-- 修复 4: daily_stats 表添加 INSERT 策略
-- ============================================================================

-- 检查是否已存在 INSERT 策略
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_policies
        WHERE tablename = 'daily_stats'
        AND policyname = 'System can insert daily stats'
    ) THEN
        CREATE POLICY "System can insert daily stats" ON daily_stats
            FOR INSERT WITH CHECK (auth.role() = 'service_role');
    END IF;
END $$;

-- ============================================================================
-- 修复 5: growth_tags 表添加 behavior_tags GIN 索引
-- ============================================================================

-- 检查索引是否已存在
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_indexes
        WHERE tablename = 'growth_tags'
        AND indexname = 'idx_growth_tags_behavior'
    ) THEN
        CREATE INDEX idx_growth_tags_behavior ON growth_tags USING GIN (behavior_tags);
    END IF;
END $$;

-- ============================================================================
-- 修复完成
-- ============================================================================
