# Migration rétroactive des contract_id dans email_logs ## Problème Les emails de signature électronique envoyés **avant la modification** n'ont pas de `contract_id` enregistré dans la table `email_logs`. Cela empêche l'affichage des notifications passées dans la colonne "Notif." de la page staff/contrats. ## Solution Ce script de migration analyse les emails de signature existants et remplit rétroactivement le champ `contract_id` en utilisant les données du `template_data`. ## Comment l'utiliser ### Option 1 : Via l'éditeur SQL de Supabase (Recommandé) 1. Connectez-vous à votre projet Supabase 2. Allez dans **SQL Editor** 3. Copiez-collez le contenu du fichier `002_backfill_contract_ids_in_email_logs.sql` 4. Cliquez sur **Run** 5. Vérifiez les logs qui affichent le nombre d'emails mis à jour ### Option 2 : Via la CLI Supabase ```bash supabase db execute --file supabase/migrations/002_backfill_contract_ids_in_email_logs.sql ``` ## Ce que fait le script 1. **Parcourt** tous les emails de type signature (`signature-request-employer`, `signature-request-employee`, `signature-request-salarie`) qui n'ont pas de `contract_id` 2. **Extrait** la référence du contrat depuis le `template_data` : - `contractReference` - `contract_number` - `reference` 3. **Recherche** le contrat correspondant dans la table `cddu_contracts` 4. **Met à jour** le champ `contract_id` dans `email_logs` 5. **Affiche** des statistiques finales ## Résultats attendus Après l'exécution, vous devriez voir : ``` Début de la migration des contract_id dans email_logs... Progression: 100 emails mis à jour... Progression: 200 emails mis à jour... Migration terminée: 247 emails mis à jour avec leur contract_id Statistiques après migration: - Emails de signature avec contract_id: 247 - Emails de signature sans contract_id: 12 ``` Les emails qui restent sans `contract_id` sont probablement : - Des emails de test - Des emails pour des contrats supprimés - Des emails avec des données incomplètes ## Vérification Pour vérifier manuellement : ```sql -- Voir les emails de signature avec leur contract_id SELECT el.id, el.email_type, el.recipient_email, el.created_at, el.contract_id, c.contract_number FROM email_logs el LEFT JOIN cddu_contracts c ON c.id = el.contract_id WHERE el.email_type IN ('signature-request-employer', 'signature-request-employee', 'signature-request-salarie') ORDER BY el.created_at DESC LIMIT 20; ``` ## Impact - ✅ **Sécurité** : Lecture seule puis UPDATE uniquement sur `contract_id` - ✅ **Performance** : Indexé sur `contract_id` après migration - ✅ **Rollback** : Peut être annulé en mettant `contract_id` à NULL - ✅ **Idempotent** : Peut être exécuté plusieurs fois sans problème ## Rollback (si nécessaire) Si vous voulez annuler la migration : ```sql UPDATE email_logs SET contract_id = NULL WHERE email_type IN ('signature-request-employer', 'signature-request-employee', 'signature-request-salarie') AND contract_id IS NOT NULL; ``` ## Après la migration Une fois la migration exécutée, la colonne "Notif." dans `/staff/contrats` affichera **toutes** les notifications passées et futures pour chaque contrat.