- 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
102 lines
3.2 KiB
Markdown
102 lines
3.2 KiB
Markdown
# 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.
|