# Migration Lambda → Next.js API - Avenant Completion ## 📋 Context Migration de la Lambda AWS `postDocuSealFinalEmailsAvenant` vers une route API Next.js intégrée au système d'emails universel v2. ## 🎯 Objectifs 1. ✅ Remplacer la Lambda AWS par une route Next.js 2. ✅ Utiliser le système d'emails universel v2 (templates Handlebars) 3. ✅ Logger les emails dans Supabase (`email_logs`) 4. ✅ Supprimer la dépendance à Airtable 5. ✅ Supprimer le HTML inline hardcodé ## 🔧 Fichiers Créés/Modifiés ### ✅ Nouveau Webhook Handler **Fichier** : `app/api/webhooks/docuseal-amendment-completed/route.ts` **Fonction** : Traite la complétion d'un avenant (toutes parties signées) **Flow** : 1. Reçoit webhook DocuSeal avec `submissionId` 2. Recherche l'avenant par `docuseal_submission_id` 3. Met à jour `signature_status` → `'completed'` 4. Envoie email à l'employeur (`amendment-completed-employer`) 5. Envoie email au salarié (`amendment-completed-employee`) 6. Logs les emails dans `email_logs` **Sécurité** : - Utilise `createRouteHandlerClient` (Supabase Auth) - Clé API DocuSeal en Authorization header ### ✅ Templates d'Emails Ajoutés **Fichier** : `lib/emailTemplateService.ts` **Templates créés** : #### 1. `amendment-completed-employer` - **Sujet** : "Avenant n°X signé - [Organisation]" - **CTA** : "Voir les documents" - **Info** : Salarié, matricule, détails avenant - **Message** : Confirmation signature par toutes les parties #### 2. `amendment-completed-employee` - **Sujet** : "Votre avenant n°X est signé - [Organisation]" - **CTA** : "Télécharger l'avenant" - **Info** : Employeur, matricule, détails avenant - **Message** : Téléchargement de l'exemplaire signé ### ✅ Types Ajoutés **Fichiers** : - `lib/emailTemplateService.ts` (EmailTypeV2) - `lib/emailLoggingService.ts` (EmailType) **Types** : - `amendment-completed-employer` - `amendment-completed-employee` ## 🔄 Flux Complet Avenant ### Étape 1 : Signature Employeur **Webhook** : `/api/webhooks/docuseal-amendment` **Action** : 1. Employeur signe l'avenant sur DocuSeal 2. Webhook reçu avec `submissionId` 3. Update avenant : `signature_status` → `'pending_employee'` 4. Envoi email au salarié (`signature-request-employee-amendment`) ### Étape 2 : Signature Salarié (Complétion) **Webhook** : `/api/webhooks/docuseal-amendment-completed` **Action** : 1. Salarié signe l'avenant sur DocuSeal 2. Webhook reçu avec `submissionId` 3. Update avenant : `signature_status` → `'completed'` 4. Envoi email employeur (`amendment-completed-employer`) 5. Envoi email salarié (`amendment-completed-employee`) ## 📊 Comparaison Lambda vs Next.js | Aspect | Lambda (Avant) | Next.js (Après) | |--------|----------------|-----------------| | **Localisation** | iad1 (US-Est) ❌ | cdg1 (Paris) ✅ | | **Templates** | HTML inline hardcodé | Handlebars universel v2 | | **Logging** | Airtable ❌ | Supabase `email_logs` ✅ | | **Auth** | Clé API custom | Supabase Auth | | **Maintenance** | Code séparé | Code intégré au projet | | **Réutilisabilité** | Zéro | Composants réutilisables | ## ⚠️ Migration SQL Requise Exécuter dans **Supabase SQL Editor** : ```sql ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'amendment-completed-employer'; ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'amendment-completed-employee'; ALTER TYPE email_type ADD VALUE IF NOT EXISTS 'signature-request-employee-amendment'; ``` Voir : `MIGRATION_SQL_EMAIL_TYPES.md` pour le script complet. ## 🧪 Tests à Effectuer ### Test 1 : Signature Employeur → Email Salarié 1. Créer un avenant via staff/contrats 2. Envoyer pour signature employeur 3. Signer en tant qu'employeur 4. ✅ Vérifier email reçu par salarié 5. ✅ Vérifier log dans `email_logs` (type: `signature-request-employee-amendment`) ### Test 2 : Signature Salarié → Emails Confirmation 1. Reprendre avenant de Test 1 (pending_employee) 2. Signer en tant que salarié 3. ✅ Vérifier email reçu par employeur (type: `amendment-completed-employer`) 4. ✅ Vérifier email reçu par salarié (type: `amendment-completed-employee`) 5. ✅ Vérifier logs dans `email_logs` (2 entrées) 6. ✅ Vérifier `signature_status` = `'completed'` dans `avenants` ### Test 3 : Liens de Téléchargement 1. Cliquer sur CTA dans email employeur 2. ✅ Vérifier accès aux documents 3. Cliquer sur CTA dans email salarié 4. ✅ Vérifier téléchargement avenant signé ## 🗑️ Nettoyage Lambda (Après Tests) Une fois les tests validés : 1. **AWS Lambda Console** : - Désactiver trigger DocuSeal - Supprimer fonction `postDocuSealFinalEmailsAvenant` - Supprimer layer Node.js si non utilisé ailleurs 2. **DocuSeal** : - Vérifier webhook configuré sur nouvelle route Next.js - URL : `https://espacepaieodentas.com/api/webhooks/docuseal-amendment-completed` 3. **Airtable** : - ✅ Déjà supprimé (variables d'environnement retirées) 4. **Documentation** : - Mettre à jour `DOCUSEAL_SIGNATURE_CONFIG.md` - Archiver code Lambda dans repo si backup souhaité ## 📝 Configuration DocuSeal **Webhook à Configurer** : - **Event** : `form.completed` (toutes parties signées) - **URL** : `https://espacepaieodentas.com/api/webhooks/docuseal-amendment-completed` - **Method** : POST - **Headers** : - `Authorization: Bearer [DOCUSEAL_API_KEY]` - `Content-Type: application/json` **Payload Attendu** : ```json { "event_type": "form.completed", "data": { "id": "submission_123456", "template": { "name": "AVENANT_REF_CONTRACT" }, "created_at": "2025-01-XX", "submitters": [ { "email": "employer@company.com", "role": "Employeur" }, { "email": "employee@example.com", "role": "Salarié" } ] } } ``` ## 🎯 Avantages de la Migration 1. **RGPD** : Région Paris (cdg1) → données EU uniquement 2. **Maintenance** : Code centralisé dans le projet Next.js 3. **Réutilisabilité** : Templates Handlebars pour tous les emails 4. **Logging** : Traçabilité complète dans Supabase 5. **Performance** : Moins de latence (cdg1 vs iad1) 6. **Coûts** : Réduction coûts AWS Lambda 7. **Cohérence** : Système unifié pour tous les emails ## 🔗 Références - Webhook avenant étape 1 : `/api/webhooks/docuseal-amendment` - Webhook avenant étape 2 : `/api/webhooks/docuseal-amendment-completed` - Email templates : `lib/emailTemplateService.ts` - Email logging : `lib/emailLoggingService.ts` - Migration SQL : `MIGRATION_SQL_EMAIL_TYPES.md` - Lambda original : `LAMBDA_EMAIL_SIGNATURE_SALARIE_GUIDE.md` (contrats initiaux) ## ✅ Checklist Déploiement - [x] Créer route API Next.js - [x] Ajouter templates emails (employer + employee) - [x] Ajouter types TypeScript - [ ] Exécuter migration SQL Supabase - [ ] Configurer webhook DocuSeal - [ ] Tester flux complet (étape 1 + étape 2) - [ ] Vérifier logs dans `email_logs` - [ ] Valider emails reçus (contenu + design) - [ ] Désactiver Lambda AWS - [ ] Mettre à jour documentation - [ ] Commit + push code ## 📅 Status **Date** : 2025-01-XX **Status** : ✅ Code prêt, en attente SQL + tests **Bloquants** : Migration SQL à exécuter dans Supabase **Prochaine étape** : Exécuter SQL puis tester avec avenant réel