- Add database columns for last_employer_notification_at and last_employee_notification_at in cddu_contracts - Update all email sending endpoints to record timestamps (remind-employer, relance-salarie, docuseal-signature, signature-salarie) - Create smart reminder system with 24h cooldown to prevent spam - Add progress tracking modal with real-time status (pending/sending/success/error) - Display actual employer/employee email addresses in reminder modal - Show notification timestamps in contracts grid with color coding (green/orange/red based on contract start date) - Change employer email button URL from DocuSeal direct link to /signatures-electroniques - Create /api/staff/organizations/emails endpoint for bulk email fetching - Add retroactive migration script for historical email_logs data - Update Contract TypeScript type and API responses to include new fields
3.2 KiB
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é)
- Connectez-vous à votre projet Supabase
- Allez dans SQL Editor
- Copiez-collez le contenu du fichier
002_backfill_contract_ids_in_email_logs.sql - Cliquez sur Run
- Vérifiez les logs qui affichent le nombre d'emails mis à jour
Option 2 : Via la CLI Supabase
supabase db execute --file supabase/migrations/002_backfill_contract_ids_in_email_logs.sql
Ce que fait le script
-
Parcourt tous les emails de type signature (
signature-request-employer,signature-request-employee,signature-request-salarie) qui n'ont pas decontract_id -
Extrait la référence du contrat depuis le
template_data:contractReferencecontract_numberreference
-
Recherche le contrat correspondant dans la table
cddu_contracts -
Met à jour le champ
contract_iddansemail_logs -
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 :
-- 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_idaprè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 :
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.