228 lines
No EOL
6.1 KiB
Markdown
228 lines
No EOL
6.1 KiB
Markdown
# Système d'Email Universel
|
||
|
||
## Vue d'ensemble
|
||
|
||
Le système d'email universel permet de gérer tous les emails de l'application avec un template unique qui s'adapte automatiquement selon le type de notification.
|
||
|
||
## Architecture
|
||
|
||
### Fichiers principaux
|
||
|
||
- `lib/emailTemplateService.ts` - Service principal du système universel
|
||
- `lib/emailMigrationHelpers.ts` - Utilitaires de migration
|
||
- `lib/emailService.ts` - Service existant mis à jour pour les contrats
|
||
- `templates-mails/` - Templates individuels existants (legacy)
|
||
|
||
## Types d'emails supportés
|
||
|
||
Le système supporte 14 types d'emails différents, chacun avec sa propre couleur et configuration :
|
||
|
||
| Type | Couleur | Usage |
|
||
|------|---------|-------|
|
||
| `contract-created` | Vert | Création de nouveaux contrats |
|
||
| `contract-updated` | Bleu | Modification de contrats |
|
||
| `contract-cancelled` | Rouge | Annulation de contrats |
|
||
| `invitation` | Violet | Invitation d'utilisateurs |
|
||
| `invoice` | Orange | Envoi de factures |
|
||
| `signature-request` | Indigo | Demande de signature électronique |
|
||
| `signature-reminder` | Ambre | Rappel de signature |
|
||
| `password-reset` | Cyan | Réinitialisation de mot de passe |
|
||
| `otp` | Lime | Codes de vérification |
|
||
| `access-granted` | Émeraude | Accès accordés |
|
||
| `access-revoked` | Rose | Accès révoqués |
|
||
| `account-activation` | Jaune | Invitation/activation de compte |
|
||
| `access-updated` | Orange | Modification d’habilitation (rôle) |
|
||
| `notification` | Gris | Notifications générales |
|
||
| `reminder` | Jaune | Rappels |
|
||
| `welcome` | Teal | Messages de bienvenue |
|
||
|
||
## Utilisation
|
||
|
||
### Envoi d'un email
|
||
|
||
```typescript
|
||
import { sendUniversalEmail } from '../lib/emailTemplateService';
|
||
|
||
// Email de nouveau contrat
|
||
await sendUniversalEmail({
|
||
to: 'artiste@example.com',
|
||
type: 'contract-created',
|
||
data: {
|
||
nomSalarie: 'Jean Dupont',
|
||
nomProducteur: 'Théâtre National',
|
||
nomSpectacle: 'Le Mariage de Figaro',
|
||
dateDebut: '15 janvier 2025',
|
||
dateFin: '30 mars 2025',
|
||
cachet: '450€',
|
||
signatureLink: 'https://example.com/sign/abc123'
|
||
}
|
||
});
|
||
|
||
// Email d'invitation
|
||
await sendUniversalEmail({
|
||
to: 'nouveau@example.com',
|
||
type: 'invitation',
|
||
data: {
|
||
invitedUserName: 'Marie Martin',
|
||
inviterName: 'Admin Système',
|
||
organizationName: 'Compagnie Théâtrale',
|
||
activationLink: 'https://example.com/activate/def456'
|
||
}
|
||
});
|
||
```
|
||
|
||
### Fonctions de migration
|
||
|
||
Pour faciliter la transition, des fonctions spécialisées sont disponibles :
|
||
|
||
```typescript
|
||
import {
|
||
sendInvitationEmail,
|
||
sendInvoiceEmail,
|
||
sendSignatureRequestEmail,
|
||
sendPasswordResetEmail,
|
||
sendOTPEmail
|
||
} from '../lib/emailMigrationHelpers';
|
||
|
||
// Utilisation simplifiée
|
||
await sendInvitationEmail({
|
||
to: 'user@example.com',
|
||
invitedUserName: 'Jean Dupont',
|
||
inviterName: 'Admin',
|
||
organizationName: 'Ma Compagnie',
|
||
activationLink: 'https://...'
|
||
});
|
||
```
|
||
|
||
### Exemples accès / habilitations
|
||
|
||
```typescript
|
||
import {
|
||
sendAccountActivationEmail,
|
||
sendAccessUpdatedEmail,
|
||
sendAccessRevokedEmail
|
||
} from '../lib/emailMigrationHelpers';
|
||
|
||
// Activation de compte
|
||
await sendAccountActivationEmail('user@example.com', {
|
||
firstName: 'Marie',
|
||
organizationName: 'Compagnie Théâtrale',
|
||
activationUrl: 'https://paie.odentas.fr/activate?token=abc'
|
||
});
|
||
|
||
// Modification d’habilitation
|
||
await sendAccessUpdatedEmail('user@example.com', {
|
||
firstName: 'Jean',
|
||
organizationName: 'Odentas',
|
||
oldRole: 'AGENT',
|
||
newRole: 'ADMIN',
|
||
updatedBy: 'admin@odentas.fr',
|
||
updateDate: new Date().toLocaleString('fr-FR')
|
||
});
|
||
|
||
// Révocation d’accès
|
||
await sendAccessRevokedEmail('user@example.com', {
|
||
firstName: 'Lucie',
|
||
organizationName: 'Odentas',
|
||
reason: 'Accès obsolète',
|
||
revokedBy: 'admin@odentas.fr',
|
||
revocationDate: new Date().toLocaleString('fr-FR')
|
||
});
|
||
```
|
||
|
||
## Avantages du système universel
|
||
|
||
### 1. Cohérence visuelle
|
||
- Un seul template garantit une apparence uniforme
|
||
- Design responsive automatique
|
||
- Couleurs cohérentes selon le type d'email
|
||
|
||
### 2. Maintenance simplifiée
|
||
- Un seul fichier à maintenir au lieu de 13+ templates
|
||
- Modifications centralisées
|
||
- Configuration type par type
|
||
|
||
### 3. Flexibilité
|
||
- Ajout facile de nouveaux types d'emails
|
||
- Variables dynamiques par type
|
||
- Système d'actions configurables
|
||
|
||
### 4. Compatibilité
|
||
- Fonctionne avec AWS SES
|
||
- HTML compatible avec tous les clients email
|
||
- Fallback texte automatique
|
||
|
||
## Migration depuis l'ancien système
|
||
|
||
### Étapes recommandées
|
||
|
||
1. **Phase 1** ✅ - Système de contrats migré
|
||
- `sendContractNotifications`
|
||
- `sendContractUpdateNotifications`
|
||
- `sendContractCancellationNotifications`
|
||
|
||
2. **Phase 2** - Autres types d'emails
|
||
- Remplacer les appels directs aux templates individuels
|
||
- Utiliser les fonctions de migration disponibles
|
||
|
||
3. **Phase 3** - Nettoyage (optionnel)
|
||
- Supprimer les anciens templates après validation complète
|
||
- Simplifier les imports
|
||
|
||
### Remplacement des appels existants
|
||
|
||
```typescript
|
||
// AVANT (ancien système)
|
||
await ses.sendEmail({
|
||
Destination: { ToAddresses: [email] },
|
||
Message: {
|
||
Subject: { Data: subject },
|
||
Body: { Html: { Data: htmlTemplate } }
|
||
},
|
||
Source: fromEmail
|
||
});
|
||
|
||
// APRÈS (système universel)
|
||
await sendUniversalEmail({
|
||
to: email,
|
||
type: 'contract-created',
|
||
data: contractData
|
||
});
|
||
```
|
||
|
||
## Configuration des types d'emails
|
||
|
||
Chaque type d'email peut être configuré dans `emailTemplateService.ts` :
|
||
|
||
```typescript
|
||
'contract-created': {
|
||
subject: 'Nouveau contrat CDDU créé',
|
||
colors: {
|
||
primary: '#059669', // Vert
|
||
primaryDark: '#047857',
|
||
primaryLight: '#d1fae5'
|
||
},
|
||
title: 'Nouveau contrat',
|
||
// ... autres configurations
|
||
}
|
||
```
|
||
|
||
## Tests et validation
|
||
|
||
Le système a été testé avec :
|
||
- ✅ Build Next.js réussi
|
||
- ✅ Types TypeScript validés
|
||
- ✅ Configuration AWS SES compatible
|
||
- ✅ Templates HTML responsive
|
||
|
||
## Support technique
|
||
|
||
Pour toute question ou problème avec le système d'email universel :
|
||
1. Vérifier la configuration du type d'email
|
||
2. Valider les données fournies
|
||
3. Contrôler les logs AWS SES
|
||
4. Tester avec un email de développement
|
||
|
||
---
|
||
|
||
*Système créé pour unifier et simplifier la gestion des emails dans l'application de paie spectacle.* |