Aller au contenu principal

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 :

  1. Créées automatiquement pour toutes les sessions (basées sur session_reminder_settings)
  2. Stockées dans session_workflow_tasks avec is_default_task = true
  3. Référencent default_workflow_tasks système (workflow "Session Notifications")
  4. Affichées dans l'onglet "Tasks" de la session
  5. 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 DATE pour 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" avec relative_days né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é

  1. À la création/mise à jour d'une session (WorkflowTasksCreationService.createNotificationTasksForSession) :

    • ✅ Vérifie les session_reminder_settings de l'utilisateur
    • ✅ Pour chaque notification configurée et activée :
      • Récupère la default_workflow_task correspondante (via action)
      • Calcule scheduled_at = session.start_date - hours_before
      • Crée une entrée dans session_workflow_tasks avec is_default_task = true
  2. 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_key depuis les fichiers HTML
    • ✅ Remplace les variables (session, contact, user, etc.)
    • ✅ Détermine les recipients selon send_to_user et send_to_contact
    • ✅ Envoie l'email aux destinataires appropriés

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

  1. Migration 0151 : Création du workflow système "Session Notifications" avec les default_workflow_tasks
  2. Suppression : session_reminders table et SessionRemindersService / SessionRemindersScheduler supprimés
  3. Intégration : Notifications créées via WorkflowTasksCreationService.createNotificationTasksForSession()
  4. 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)