Architecture des Notifications de Session
Date : 2026-01-27
Dernière mise à jour : 2026-01-29
Statut : ✅ Implémenté
Solution Implémentée : Unification via Workflows Système
Statut : ✅ Implémenté (2026-01-29)
L'architecture unifiée a été implémentée en utilisant l'Option C (Tâches Système). Les notifications de session sont maintenant gérées via le système de workflow tasks existant, éliminant la duplication de code et unifiant l'expérience utilisateur.
Architecture Implémentée
Les notifications de session sont maintenant des workflow tasks système créées automatiquement :
- ✅ Créées automatiquement pour toutes les sessions (basées sur
session_reminder_settings) - ✅ Stockées dans
session_workflow_tasksavecis_default_task = true - ✅ Référencent
default_workflow_taskssystème (workflow "Session Notifications") - ✅ Affichées dans l'onglet "Tasks" de la session
- ✅ Exécutées par
WorkflowTasksScheduler(même scheduler que les autres tâches)
Avantages
✅ Unification : Un seul système pour toutes les notifications
✅ Cohérence : Toutes les tâches apparaissent au même endroit
✅ Simplicité : Plus besoin de logique de déduplication
✅ Flexibilité : Les notifications peuvent coexister avec les workflows
✅ Maintenabilité : Moins de code dupliqué
Implémentation Technique
Option A : Workflow Tasks avec Flag "is_notification"
// Ajouter un champ dans session_workflow_tasks
ALTER TABLE session_workflow_tasks
ADD COLUMN is_notification BOOLEAN DEFAULT false;
// Créer des tâches "virtuelles" basées sur les settings
// workflow_task_id = NULL (ou référence à une tâche système)
// is_notification = true
Option B : Workflow Système Invisible
Créer un workflow système par défaut pour chaque utilisateur qui contient les tâches de notification. Ce workflow serait :
- Automatiquement assigné à toutes les sessions
- Invisible dans l'UI (ou marqué comme "Notifications automatiques")
- Géré par les settings de notification
Implémentation : Tâches Système (Option C - Implémentée)
Des default_workflow_tasks système ont été créés pour les notifications :
- ✅ Workflow système "Session Notifications" (
display_order = 0) - ✅ Phase
DATEpour ce workflow - ✅ Tâches par défaut : 1 semaine avant (168h), 24h avant, 1h avant
- ✅
task_type = "AUTOMATIC_EMAIL" - ✅
action = "SESSION_NOTIFICATION:{notification_id}"(ex:SESSION_NOTIFICATION:appointment-reminder-24h) - ✅
relative_unit = "HOURS"avecrelative_daysnégatif
Ces tâches sont créées automatiquement pour toutes les sessions, basées sur les settings utilisateur dans user_metadata.session_reminder_settings.
Structure Implémentée
// Dans session_workflow_tasks
{
id: UUID,
session_id: UUID,
workflow_task_id: UUID, // Référence à default_workflow_tasks.id
is_default_task: true, // true pour les notifications système
scheduled_at: Date, // Calculé : session.start_date - hours_before
status: "PENDING" | "COMPLETED" | "SKIPPED" | "FAILED",
// ... autres champs
}
// Dans default_workflow_tasks (système)
{
id: UUID,
phase_id: UUID, // Phase DATE du workflow "Session Notifications"
task_type: "AUTOMATIC_EMAIL",
action: "SESSION_NOTIFICATION:appointment-reminder-24h", // Identifiant de la notification
relative_days: -24, // Négatif pour "avant"
relative_unit: "HOURS",
// ... autres champs
}
// Dans user_metadata.session_reminder_settings (JSONB)
{
enabled: boolean,
notifications: [
{
id: "appointment-reminder-24h", // Correspond à l'action dans default_workflow_tasks
enabled: boolean,
hours_before: 24,
notification_type: "APPOINTMENT_REMINDER",
template_key: "appointment-reminder-not-shooting",
recipients: {
send_to_user: boolean,
send_to_contact: boolean
}
}
]
}
Flux Implémenté
-
À la création/mise à jour d'une session (
WorkflowTasksCreationService.createNotificationTasksForSession) :- ✅ Vérifie les
session_reminder_settingsde l'utilisateur - ✅ Pour chaque notification configurée et activée :
- Récupère la
default_workflow_taskcorrespondante (viaaction) - Calcule
scheduled_at = session.start_date - hours_before - Crée une entrée dans
session_workflow_tasksavecis_default_task = true
- Récupère la
- ✅ Vérifie les
-
Lors de l'exécution (
WorkflowTasksExecutionService.executeNotificationEmailTask) :- ✅ Le scheduler (
WorkflowTasksScheduler) récupère les tâches prêtes - ✅ Détecte les notifications via
task.action?.startsWith("SESSION_NOTIFICATION:") - ✅ Charge les settings utilisateur et trouve la config de notification
- ✅ Charge le template email via
template_keydepuis les fichiers HTML - ✅ Remplace les variables (session, contact, user, etc.)
- ✅ Détermine les recipients selon
send_to_useretsend_to_contact - ✅ Envoie l'email aux destinataires appropriés
- ✅ Le scheduler (
Affichage dans l'UI (Implémenté)
Option choisie : Tout dans "Tasks" ✅
- ✅ Les notifications apparaissent dans l'onglet "Tasks" de la session
- ✅ L'onglet "Notifications" dans les settings affiche un message informatif : "Les notifications programmées apparaissent dans l'onglet Tâches"
- ✅ Configuration des notifications dans
SessionSettingsSidebarContent(onglet "Notifications") - ✅ Les notifications sont des workflow tasks comme les autres, visibles dans l'onglet "Tasks"
Migration Effectuée
- ✅ Migration 0151 : Création du workflow système "Session Notifications" avec les
default_workflow_tasks - ✅ Suppression :
session_reminderstable etSessionRemindersService/SessionRemindersSchedulersupprimés - ✅ Intégration : Notifications créées via
WorkflowTasksCreationService.createNotificationTasksForSession() - ✅ Exécution : Notifications exécutées via
WorkflowTasksExecutionService.executeNotificationEmailTask()
Fichiers Modifiés/Créés
Backend
- ✅
backend/src/workflow-tasks/workflow-tasks-creation.service.ts- Création des tâches de notification - ✅
backend/src/workflow-tasks/workflow-tasks-execution.service.ts- Exécution des notifications avec template_key et recipients - ✅
backend/src/workflow-tasks/workflow-tasks-query.service.ts- Inclusion des default_workflow_tasks dans les requêtes - ✅
backend/src/sessions/sessions.controller.ts- Endpoints pour settings (via UserMetadataService) - ❌
backend/src/sessions/session-reminders.service.ts- SUPPRIMÉ - ❌
backend/src/sessions/session-reminders.scheduler.ts- SUPPRIMÉ
Frontend
- ✅
frontend/src/pages/sessions/SessionViewPage/components/SessionSettingsSidebarContent.tsx- Configuration des notifications - ❌
frontend/src/client/sessions/useSessionReminders.ts- SUPPRIMÉ (remplacé par workflow tasks)
Migrations
- ✅
infra/liquibase/changes/0151_add_notification_workflow_tasks/- Workflow système et tâches par défaut - ❌
infra/liquibase/changes/0150_create_session_reminders/- SUPPRIMÉ (migration retirée)
Avantages de l'Implémentation
✅ Unification : Un seul système pour toutes les notifications
✅ Cohérence : Toutes les tâches apparaissent dans l'onglet "Tasks"
✅ Simplicité : Plus besoin de logique de déduplication
✅ Flexibilité : Les notifications peuvent coexister avec les workflows
✅ Maintenabilité : Moins de code dupliqué
✅ Réutilisation : Utilise l'infrastructure workflow existante
✅ Templates : Support des templates email avec remplacement de variables
✅ Recipients : Gestion flexible des destinataires (user, contact, ou les deux)