-- Sprint 3.6c — Analyse patterns (Premium). -- -- Table pattern_analyses : snapshot des patterns récurrents détectés sur les -- 5 dernières productions corrigées + exercices long terme + indice de préparation. -- -- Stratégie d'invalidation : on INSERT un nouveau row à chaque recompute (pas -- d'UPDATE), pour garder un historique des analyses. La plus récente est -- récupérée via ORDER BY created_at DESC LIMIT 1. -- -- À exécuter manuellement via `supabase db push` (Règle F). CREATE TABLE IF NOT EXISTS pattern_analyses ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES profiles(id) ON DELETE CASCADE, productions_ids UUID[] NOT NULL, patterns JSONB NOT NULL, exercises JSONB NOT NULL, preparation_index INTEGER NOT NULL, preparation_message TEXT NOT NULL, analyzed_count INTEGER NOT NULL DEFAULT 5, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); ALTER TABLE pattern_analyses DROP CONSTRAINT IF EXISTS pattern_analyses_preparation_index_check, ADD CONSTRAINT pattern_analyses_preparation_index_check CHECK (preparation_index BETWEEN 0 AND 100); CREATE INDEX IF NOT EXISTS pattern_analyses_user_created_idx ON pattern_analyses (user_id, created_at DESC); ALTER TABLE pattern_analyses ENABLE ROW LEVEL SECURITY; DROP POLICY IF EXISTS "Utilisateur voit ses analyses" ON pattern_analyses; CREATE POLICY "Utilisateur voit ses analyses" ON pattern_analyses FOR SELECT USING (auth.uid() = user_id);