Ce document liste les conditions qui declenchent la creation d'une notification BO (table notif) dans DEMA1N.
Portee
- Type de notification: notifications internes BO (pas les emails/SMS transactionnels).
- Source technique: appels a
createNotif(...)dansback/src/binomes/services/notif.service.ts.
Regles generales de reception
- Une notification est "recue" par l'admin dont l'ID est passe en 3e argument de
createNotif(..., adminId, ...). - Aucune logique d'opt-in / newsletter n'est appliquee sur ces notifs BO.
- Une notif est consideree "non lue" quand le champ
readestNULL.
Cas de creation de notifications
1) assigner-jeune
- Declencheur: appel
PUT /jeune/associate. - Contexte: un jeune est assigne a un admin.
- Conditions metier:
- l'utilisateur qui assigne est
superadminouadmin(guard de route), - si l'utilisateur qui assigne est
admin, il doit avoir l'optionmanager, - l'utilisateur cible (
adminId) doit avoir le profiladmin. - Destinataire de la notif: l'admin cible (
adminId). - Description stockee:
"<Prenom> <Nom> t'a ete assigne". - Code:
back/src/binomes/controllers/jeune.controller.ts(associateJeune)
2) vol-jeune
- Declencheur: changement de suivi admin d'un jeune via
changeAdminJeuneAndBinomeAndBenevole(...). - Contexte: un admin "reprend" un jeune deja suivi.
- Condition exacte:
jeune.adminIdexiste- et
jeune.adminId !== adminId(nouvel admin different de l'actuel). - Destinataire de la notif: l'ancien admin du jeune (
jeune.adminId). - Description stockee:
"<Prenom nouvel admin> a suivi le jeune <Prenom jeune> <Nom jeune>". - Code:
back/src/binomes/services/jeunes.service.ts(changeAdminJeuneAndBinomeAndBenevole)
3) vol-mentor
- Declencheur: changement d'admin associe d'un mentor via
changeAdminAssocieBenevoleAndBinomesAndJeunes(...). - Contexte: un admin "reprend" un mentor deja suivi.
- Condition exacte:
benevole.adminAssocieIdexiste- et
benevole.adminAssocieId !== adminId(nouvel admin different de l'actuel). - Destinataire de la notif: l'ancien admin associe du mentor (
benevole.adminAssocieId). - Description stockee:
"<Prenom nouvel admin> a suivi le mentor <Prenom mentor> <Nom mentor>". - Code:
back/src/binomes/services/benevoles.service.ts(changeAdminAssocieBenevoleAndBinomesAndJeunes)
4) jeune-apte (cron)
- Declencheur: cron quotidien.
- Horaire cron:
23:45(expression0 45 23 * * *). - Condition d'execution worker:
WORKER_SERVER === '1'. - Contexte: alerte BO pour les jeunes en attente de matching.
- Conditions de selection des jeunes:
status = 'APTE'statusUpdateDateentre J-6 et J-5adminIdnon null- Destinataire de la notif: l'admin du jeune (
jeune.adminId). - Description stockee:
"<Prenom jeune> <Nom jeune> attend d'etre matche depuis 5 jours". - Code:
back/src/binomes/services/cron-tasks.service.ts(notifyJeuneApte)back/src/binomes/services/jeunes.service.ts(notifyJeuneApte)
5) binome-refuse
- Declencheur: un binome passe au statut
REFUSEet le mentor repasse enAPTE. - Contexte: mentors EP (badge
partenaire) uniquement. Ils conservent leuradminAssocieIdapres un refus ; l'admin associe est prevenu qu'il peut matcher a nouveau ce mentor. - Condition exacte (verifiee dans
BinomeService.notifyBinomeRefuseToAdminAssocie): binome.status === 'REFUSE'(et non pasANNULE) ;- apres mise a jour,
benevole.status === 'APTE'; benevole.badgescontient'partenaire';benevole.adminAssocieIdest defini.- Destinataire de la notif: l'admin associe du mentor (
benevole.adminAssocieId). - Description stockee:
"<Prenom mentor> <Nom mentor> est de nouveau disponible car son binôme a été refusé par le jeune, tu peux le matcher à nouveau". - Cible du clic: fiche mentor
/bo/benevoles/{{benevoleId}}(slug mappe dansfront/static/model/NotifList.js). - Cas couverts (tous types de binomes : matching instantane, manuel, classique) :
- Multiselection (double proposition jeune) : quand le jeune accepte une
des propositions, l'autre (alternative) passe
REFUSEet son mentor repasseAPTE.BinomeService.premerBinome(acceptation cote jeune).BinomeService.editBinome(passage du principal depuisEN_ATTENTE_JEUNE).BinomeService.terminateBinome(terminaison forcee du principal encore enEN_ATTENTE_JEUNE).BinomeService.cancelBinomebranche alternative (refus cote jeune avec double proposition).
- Multiselection BO (annulation/terminaison en lot) :
BinomeService.cancelBinomesetBinomeService.terminateBinomesiterent respectivement surcancelBinomeetterminateBinome. La notif est donc emise une fois par binome eligible (mentor EP qui repasseAPTEapresREFUSE). - Fin des 48h (cron) :
BinomeService.cancelBinomePremer→BinomeService.cancelBinome(expiration de la duree de reponse du jeune, par defaut 3 jours viapartner.options.durationPremer). - Refus a la main : appel direct de
BinomeService.cancelBinomesur un binomeEN_ATTENTE_JEUNE(depuis le BO ou les endpointsreponse). - Suppression du compte LY :
UsersService.quitAllBinomesappelleBinomeService.cancelOneBinome, qui passe le binome enANNULE(et nonREFUSE). Le mentor repasse bienAPTE, mais la notification n'est pas emise pour ce cas (condition "pas annule" respectee). - Cas non concernes :
BinomeService.changeStatusBinome(et son pendant bulkchangeStatutsMultiple) modifie uniquement le champstatusdu binome sans toucher au statut du mentor : le mentor ne repasse pas automatiquementAPTE, donc la notif n'a pas lieu d'etre (le garde-foubenevole.status === 'APTE'dans le helper filtre de toute facon).- Code:
back/src/binomes/services/binomes.service.ts(notifyBinomeRefuseToAdminAssocie, appele danscancelBinome,cancelBinomeNonDispo,terminateBinome,editBinome,premerBinome).
Recapitulatif rapide
| Slug | Condition principale | Destinataire |
|---|---|---|
assigner-jeune |
assignation manuelle d'un jeune a un admin | admin cible |
vol-jeune |
changement d'admin d'un jeune deja suivi | ancien admin du jeune |
vol-mentor |
changement d'admin associe d'un mentor deja suivi | ancien admin associe du mentor |
jeune-apte |
jeune APTE depuis ~5 jours (cron) | admin du jeune |
binome-refuse |
mentor EP (badge partenaire) repasse APTE apres un binome REFUSE (tous types : MI, manuel, multisel., cron 48h) |
admin associe du mentor |
Notes
- Les emails/SMS transactionnels sont geres ailleurs (notamment
NotificationService) et ne sont pas inclus dans cette doc. - Si besoin, faire une doc separee "emails/SMS - conditions de declenchement".