Scheduled Exports
Système complet pour planifier des exports automatiques avec récurrence et envoi par email.
Vue d'ensemble
Le système d'exports planifiés permet de :
- Planifier des exports automatiques à des dates/heures spécifiques
- Configurer des exports récurrents (quotidien, hebdomadaire, mensuel, annuel)
- Envoyer automatiquement les exports par email
- Sélectionner les champs à exporter
- Utiliser des templates d'export pré-configurés
Architecture
Backend
Table : scheduled_exports
Stocke les exports planifiés avec :
- Configuration de récurrence
- Paramètres d'envoi par email
- Sélection de champs personnalisée
- Référence à un template d'export (optionnel)
Service : ScheduledExportsService
- Fichier :
backend/src/scheduled-exports/scheduled-exports.service.ts - Responsabilités :
- Gestion des exports planifiés (CRUD)
- Exécution des exports planifiés
- Calcul des prochaines dates d'exécution
Scheduler : ScheduledExportsScheduler
- Fichier :
backend/src/scheduled-exports/scheduled-exports.scheduler.ts - Fréquence : Exécution toutes les 5 minutes
- Responsabilités :
- Détection des exports prêts à être exécutés
- Ajout des jobs d'export à la queue
Processor : ExportProcessor
- Fichier :
backend/src/queue/processors/export.processor.ts - Responsabilités :
- Génération de l'export
- Envoi par email si configuré
- Upload vers le stockage R2
API Endpoints
Liste des exports planifiés
Endpoint: GET /api/scheduled-exports
Response:
[
{
"id": "uuid",
"owner_id": "uuid",
"entity": "contacts",
"format": "csv",
"scheduled_at": "2025-01-15T10:00:00Z",
"recurrence_pattern": {
"frequency": "weekly",
"interval": 1
},
"status": "ACTIVE",
"send_email": true,
"email_recipient": "user@example.com",
"email_subject": "Weekly Contacts Export",
"selected_fields": ["first_name", "last_name", "email"],
"next_run_at": "2025-01-22T10:00:00Z",
"last_run_at": "2025-01-15T10:00:00Z",
"run_count": 5
}
]
Créer un export planifié
Endpoint: POST /api/scheduled-exports
Request Body:
{
"entity": "contacts",
"format": "csv",
"scheduled_at": "2025-01-15T10:00:00Z",
"recurrence_pattern": {
"frequency": "weekly",
"interval": 1,
"endDate": "2025-12-31T23:59:59Z"
},
"send_email": true,
"email_recipient": "user@example.com",
"email_subject": "Weekly Contacts Export",
"email_message": "Please find attached your weekly contacts export.",
"selected_fields": ["first_name", "last_name", "email"],
"export_template_id": "uuid"
}
Response: Export planifié créé
Mettre à jour un export planifié
Endpoint: PUT /api/scheduled-exports/:id
Request Body: Même structure que la création (tous les champs sont optionnels)
Supprimer un export planifié
Endpoint: DELETE /api/scheduled-exports/:id
Activer un export planifié
Endpoint: POST /api/scheduled-exports/:id/activate
Change le statut à ACTIVE et calcule la prochaine date d'exécution.
Mettre en pause un export planifié
Endpoint: POST /api/scheduled-exports/:id/pause
Change le statut à PAUSED.
Annuler un export planifié
Endpoint: POST /api/scheduled-exports/:id/cancel
Change le statut à CANCELLED.
Récurrence
Patterns de récurrence
{
"frequency": "daily" | "weekly" | "monthly" | "yearly",
"interval": number, // Ex: 1 = chaque jour/semaine/mois/année, 2 = tous les 2 jours/semaines/etc.
"endDate": "2025-12-31T23:59:59Z" // Optionnel : date de fin de récurrence
}
Exemples
Export quotidien:
{
"frequency": "daily",
"interval": 1
}
Export hebdomadaire (toutes les 2 semaines):
{
"frequency": "weekly",
"interval": 2
}
Export mensuel avec date de fin:
{
"frequency": "monthly",
"interval": 1,
"endDate": "2025-12-31T23:59:59Z"
}
Statuts
- PENDING : Export créé mais pas encore activé
- ACTIVE : Export actif, sera exécuté selon la planification
- PAUSED : Export temporairement suspendu
- CANCELLED : Export annulé (ne sera plus exécuté)
Envoi par Email
Quand send_email est true, l'export est automatiquement envoyé par email :
- Pièce jointe : Le fichier d'export est attaché à l'email
- Sujet personnalisable : Via
email_subject - Message personnalisable : Via
email_message - Destinataire : Spécifié dans
email_recipient
Sélection de Champs
Vous pouvez spécifier les champs à exporter via selected_fields :
{
"selected_fields": ["first_name", "last_name", "email", "phone_number"]
}
Utilisation de Templates
Vous pouvez référencer un template d'export existant :
{
"export_template_id": "uuid-of-template"
}
Le template fournira les champs sélectionnés et le format.
Exemples d'Utilisation
Export quotidien de contacts en CSV
curl -X POST "http://localhost:3000/api/scheduled-exports" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entity": "contacts",
"format": "csv",
"scheduled_at": "2025-01-15T08:00:00Z",
"recurrence_pattern": {
"frequency": "daily",
"interval": 1
},
"send_email": true,
"email_recipient": "user@example.com",
"email_subject": "Daily Contacts Export"
}'
Export mensuel de sessions en Excel avec champs sélectionnés
curl -X POST "http://localhost:3000/api/scheduled-exports" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entity": "sessions",
"format": "excel",
"scheduled_at": "2025-01-01T00:00:00Z",
"recurrence_pattern": {
"frequency": "monthly",
"interval": 1
},
"send_email": true,
"email_recipient": "user@example.com",
"selected_fields": ["id", "title", "status", "start_date", "location"]
}'
Gestion des Erreurs
En cas d'erreur lors de l'exécution d'un export planifié :
- L'erreur est enregistrée dans
error_message - Le statut reste
ACTIVEpour permettre une nouvelle tentative - Le système de queue gère automatiquement les retries
Monitoring
Le scheduler log toutes les opérations :
- Détection des exports prêts à être exécutés
- Exécution des exports
- Erreurs éventuelles
Consultez les logs pour suivre l'activité des exports planifiés.
Fichiers
backend/src/scheduled-exports/scheduled-exports.service.ts- Service principalbackend/src/scheduled-exports/scheduled-exports-crud.service.ts- CRUD operationsbackend/src/scheduled-exports/scheduled-exports.scheduler.ts- Schedulerbackend/src/scheduled-exports/scheduled-exports.controller.ts- Endpoints RESTinfra/liquibase/changes/0139_create_scheduled_exports/- Migration
Voir aussi
- Export System - Documentation du système d'export
- Queue System - Documentation du système de queue
- Export Templates - Documentation des templates d'export