Tâches planifiées (cron tasks)
Définies dans api/src/core/cron-tasks/cron-tasks.ts. Toutes les tâches datées utilisent le fuseau Europe/Paris.
Tâches récurrentes (automatiques)
| Méthode | Schedule | Description |
|---|---|---|
monitorMuxAssets |
toutes les 2 secondes | Surveille l'état des assets vidéo Mux et met à jour leur statut |
updateElasticDatabase |
toutes les minutes | Synchronisation incrémentale de l'index ElasticSearch |
updateElasticDatabaseDaily |
chaque jour à minuit | Synchronisation complète (force all) de l'index ElasticSearch |
mailToNotifyNewMessage |
chaque jour à 19h | Envoie un email aux éclaireurs ayant reçu un message non lu dans le chat |
mailToNotifyAbsenceOfResponseFromEclaireur |
chaque jour à 20h | Envoie un email aux lycéens dont l'éclaireur n'a pas répondu |
Tâches annuelles (rentrée scolaire — planning étalé fin août / début septembre)
Les dates ci-dessous ont été décalées et espacées en 2026 (initialement toutes calées sur le 1er août) pour éviter que plusieurs migrations lourdes ne tournent le même jour et ne surchargent le serveur.
| Méthode | Schedule | Description |
|---|---|---|
progressNiveauxAnnuels (niveau-cron.service.ts) |
27 août à 00h00 | Passage annuel des niveaux lycéens (Seconde → Première → Terminale → En transition), voir niveau.md |
resetIsProfileCompleteForNewSchoolYear |
31 août à 00h00 | Remet isProfileComplete à false pour tous les éclaireurs — ils doivent re-valider leur profil pour la nouvelle année |
hideInactiveEclaireursForNewSchoolYear |
1er septembre à 12h00 | Passe en statut caché les éclaireurs visibles n'ayant aucun parcours sur les 2 dernières années scolaires ; désindexe ces profils d'ElasticSearch |
notifyObsoleteAccountsAugust |
1er septembre à 00h00 | Envoie l'email final (Brevo) aux utilisateurs non-admin 27+ ans révolus |
archiveObsoleteAccountsAugust |
2 septembre à 00h00 | Anonymise les comptes notifiés la veille |
hideInactiveEclaireursForNewSchoolYear envoie le mail « profil masqué » (template Brevo 518) à chaque éclaireur qu'elle masque. C'est le seul déclencheur de ce mail : changer sa photo de profil ne masque plus et ne notifie plus (voir entities/users.md).
Tâches annuelles (archivage — 1er juillet)
| Méthode | Schedule | Description |
|---|---|---|
notifyObsoleteAccountsJuly |
1er août à 00h00 | Envoie un email d'avertissement (Brevo) aux utilisateurs non-admin ayant plus de 27 ans révolus ; aucune suppression à ce stade. |
Logique d'archivage des comptes obsolètes
- Population ciblée : utilisateurs sans rôle Admin, dont la date de naissance est renseignée et dont l'âge est ≥ 27 ans révolus à la date de référence.
- Avertissement (
notifyObsoleteAccountsJuly) : email d'avertissement (BREVO_TEMPLATE_ARCHIVAGE_JUILLET). Paramètre envoyé :PRENOM. - Email final (
notifyObsoleteAccountsAugust, 1er septembre) : email final (BREVO_TEMPLATE_ARCHIVAGE_AOUT), calculé sur les utilisateurs ayant eu 27 ans révolus au 1er juillet de l'année en cours. Paramètre envoyé :PRENOM. - Anonymisation (
archiveObsoleteAccountsAugust, 2 septembre) : même pipeline que la suppression manuelle (UserService.delete) — champs personnels effacés, email brouillé, notification RabbitMQ, soft-delete — puis resynchronisation de l'index ElasticSearch. Ne traite que les comptes marquésnotifiedObsoleteAugustAt(donc déjà notifiés la veille). - Idempotence : chaque envoi réussi marque le user via
notifiedObsoleteJulyAt/notifiedObsoleteAugustAt(colonnesusers). Un rejeu de la tâche (ex. après un 504 sur l'endpoint admin) ne renotifie que les users pas encore marqués — on peut relancer la tâche sans risque de doublon, et interroger ces colonnes pour savoir qui a été notifié. - Déclenchement admin non bloquant :
notify-obsolete-accounts-july,notify-obsolete-accounts-augustetarchive-obsolete-accounts-augustbouclent sur potentiellement beaucoup d'users (1 appel Brevo/anonymisation chacun) ; l'endpoint admin ne les attend plus (void) pour éviter un 504 gateway sur les grosses volumétries. La réponse{success: true}signifie juste que la tâche a démarré — suivre la progression via les logs ou les colonnesnotifiedObsolete*At.
Simulation manuelle (admin)
Les tâches ci-dessus (hors monitorMuxAssets et updateElasticDatabase qui tournent en continu) peuvent être déclenchées manuellement depuis l'interface admin : Admin → Tâches planifiées.
Les endpoints correspondants : POST /cron-tasks-admin/run/:task avec les valeurs de :task :
update-elastic-dailynotify-absence-of-responsereset-profile-completehide-inactive-eclaireursnotify-obsolete-accounts-julynotify-and-delete-obsolete-accounts-august