espace-paie-odentas/MIGRATION_NOTIF_RETROACTIVE.md
odentas d7bdb1ef08 feat: Add notification tracking system with smart reminders
- 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
2025-10-22 21:49:35 +02:00

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é)

  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

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 :

-- 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 :

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.