Notification Catalog¶
Référence partagée des notifications exposées par le backend.
Source backend:
- heymoov-api/models/notification_constants.go
- heymoov-api/services/notification/payloads.go
Règles générales¶
- Le centre de notifications affiche
contenttel que renvoyé par l'API. - Les push mobiles affichent
titleetbodytels que fournis par le backend. - Le front utilise
type,kindet les IDs uniquement pour router. - Le front ne reconstruit pas le wording utilisateur à partir des types.
- Les IDs dans les payloads push sont des strings.
Types centre¶
| ID | Constante backend | Famille | payload.kind |
Usage |
|---|---|---|---|---|
1 |
UnreadMessageNotificationType |
agrégée | unreadMessages |
Messages directs non lus |
2 |
UnreadEventMessageNotificationType |
agrégée | unreadMessages |
Messages de moov non lus |
3 |
UnreadSolidarityMessageNotificationType |
agrégée | unreadMessages |
Messages logistiques non lus |
4 |
DeniedModerationNotificationType |
legacy | aucun contrat cible | Ancien type moderation refusée |
5 |
ValidatedModerationNotificationType |
legacy | aucun contrat cible | Ancien type moderation validée |
6 |
BannedModerationNotificationType |
legacy | aucun contrat cible | Ancien type moderation ban |
7 |
ProfileIncompleteNotificationType |
système | profileStatusChanged |
Profil incomplet |
8 |
ProfilePendingReviewNotificationType |
système | profileStatusChanged |
Profil en attente de validation |
9 |
ProfileApprovedNotificationType |
système | profileStatusChanged |
Profil validé |
10 |
ProfileDeniedNotificationType |
système | profileStatusChanged |
Profil refusé |
11 |
ProfileBannedNotificationType |
système | profileStatusChanged |
Profil suspendu |
12 |
SolidarityHostingProposalReceivedNotificationType |
système | solidarityProposalReceived |
Proposition d'hébergement reçue |
13 |
SolidarityCarpoolProposalReceivedNotificationType |
système | solidarityProposalReceived |
Proposition de covoiturage reçue |
14 |
SolidarityEquipmentProposalReceivedNotificationType |
système | solidarityProposalReceived |
Proposition de matériel reçue |
15 |
EventProposalConvertedNotificationType |
système | eventProposalConverted |
Proposition de moov convertie en event |
16 |
EventProposalSentNotificationType |
système | eventProposalSent |
Proposition de moov envoyée à un invité |
99 |
TestNotificationType |
test | selon payload de test | Notification de test |
Payloads centre¶
Messages non lus¶
{
"kind": "unreadMessages",
"scope": "direct | solidarity | event"
}
Routage:
- scope = "direct": ouvrir l'inbox avec filtre direct
- scope = "solidarity": ouvrir l'inbox avec filtre logistique
- scope = "event": ouvrir l'inbox avec filtre moovs
Profil¶
{
"kind": "profileStatusChanged",
"status": "incomplete | pending_review | approved | denied | banned"
}
Routage: - ouvrir l'écran profil ou l'état de validation du profil.
Proposition solidaire reçue¶
{
"kind": "solidarityProposalReceived",
"module": "hosting | carpool | equipment",
"requestId": 42,
"conversationId": 91,
"eventId": 7,
"helperPersonId": 17
}
Routage: - ouvrir la demande solidaire ou la conversation associée.
Proposition de moov envoyée¶
{
"kind": "eventProposalSent",
"proposalId": 77,
"title": "Badminton mardi",
"senderName": "Club Alpha",
"creatorPersonId": 12,
"creatorPseudo": "Alice",
"organizerStructureId": 4,
"organizerName": "Club Alpha"
}
Notes:
- organizerStructureId et organizerName sont présents uniquement pour une proposition portée par une structure.
- senderName vaut le nom de structure si disponible, sinon le pseudo du créateur.
Routage:
- ouvrir le détail de la proposition via proposalId.
Proposition de moov convertie¶
{
"kind": "eventProposalConverted",
"status": "creator | registered | waitlisted | joinable",
"proposalId": 77,
"eventId": 123,
"chosenSlotId": 5,
"startAt": "2026-04-20T18:00:00Z",
"title": "Badminton mardi"
}
Statuts:
- creator: créateur de la proposition.
- registered: invité inscrit en liste principale sur l'event converti.
- waitlisted: invité inscrit en liste d'attente sur l'event converti.
- joinable: invité sans réponse sur le créneau choisi, pouvant encore rejoindre l'event.
Routage:
- ouvrir l'event via eventId.
- proposalId reste disponible pour contexte ou historique.
Types push¶
data.type |
Usage | Champs attendus |
|---|---|---|
newDirectMessage |
Nouveau message direct | conversationId, datetime |
newSolidarityMessage |
Nouveau message logistique | conversationId, datetime |
newEventMessage |
Nouveau message de moov | conversationId, eventId, datetime |
profileStatusChanged |
Changement d'état du profil | status, notifType, datetime |
solidarityProposalReceived |
Proposition solidaire reçue | module, requestId, conversationId, eventId, helperPersonId, datetime |
eventProposalSent |
Proposition de moov envoyée | proposalId, datetime |
eventProposalConverted |
Proposition de moov convertie en event | status, proposalId, eventId, chosenSlotId, startAt, datetime |
Wording centre et push¶
Le wording exact est fourni par le backend. Les textes ci-dessous décrivent les contenus canoniques en français.
| Flux | Titre push | Corps / content |
|---|---|---|
| Proposition de moov envoyée | Nouvelle proposition de moov |
{{SenderName}} vous propose le moov {{Title}}. Indiquez vos disponibilités parmi les créneaux proposés. |
| Conversion, créateur | Proposition validée |
Le moov {{Title}} a été créé. Il aura lieu le {{Date}} à {{Hour}}. |
| Conversion, liste principale | Proposition confirmée |
Le moov {{Title}} a été créé. Il aura lieu le {{Date}} à {{Hour}}. Vous avez une place en liste principale. |
| Conversion, liste d'attente | Proposition confirmée |
Le moov {{Title}} a été créé. Il aura lieu le {{Date}} à {{Hour}}. Vous êtes pour l'instant en liste d'attente. |
| Conversion, peut rejoindre | Proposition confirmée |
Le moov {{Title}} a été créé. Il aura lieu le {{Date}} à {{Hour}}. Vous pouvez encore rejoindre la liste des participants. |
Responsabilités front¶
Le front doit:
- afficher les textes backend tels quels ;
- router eventProposalSent vers le détail de proposition ;
- router eventProposalConverted vers l'event créé ;
- gérer les statuts creator, registered, waitlisted et joinable comme du contexte de navigation, pas comme des clés de wording.
Le front ne doit pas:
- mapper localement un ID de notification vers un texte utilisateur ;
- reconstruire un wording à partir de status ;
- utiliser les types legacy 4, 5, 6 pour de nouveaux comportements.