Aller au contenu

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 content tel que renvoyé par l'API.
  • Les push mobiles affichent title et body tels que fournis par le backend.
  • Le front utilise type, kind et 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.