Détails technico-fonctionnels des parcours
Parcours d'inscription
1. Inscription pour les particuliers
2. Inscription pour les professionnels
Activation de compte
Gestion d'organisme
1. Création d'un organisme
2. Activation d'un organisme
3. Suppression d'un organisme
Gestion d'établissement
1. Création d'un établissement
2. Activation d'un établissement
3. Suppression d'un établissement
Gestion d'utilisateur
1. Inviter un utilisateur
2. Gestion des habilitations utilisateur
3. Suppression d'un utilisateur
Gestion des trips
1. Création d'un trip
2. Publication d'un trip
3. Suppression d'un trip
Parcours de réservation
1. Effectuer une réservation
sequenceDiagram
actor Client
Client->>+Front: Effectuer une recherche
Front->>+TravelsApi: [listPublications]: GET /travels/publications
TravelsApi-->>-Front: 200 ListePublicationTrip
Front-->>-Client: Afficher la liste
Client->>+Front: Selectionner un circuit
Front->>+TravelsApi: [getPublication]: GET /travels/publications/{publication-id}
TravelsApi-->>-Front: 200 PublicationTripRepresentation
Front-->>-Client: Afficher le circuit
Client->>+Front: Choisir (Date, activitées & options)
Front->>+TravelsApi: [getTripPricing]: POST /travels/pricing
TravelsApi-->>-Front: 200 PricingDetails
Client->>+Front: Confirmer choix
Front->>+TravelsApi: [addReservation]: POST /travels/reservations
TravelsApi-->>-Front: 200 ReservationRepresentation
Front-->>-Client: Rediriger vers l'écran de récapitulatif et le formulaire d'informations client
Client->>+Front: Saisir les information des voyageurs
Front->>+TravelsApi: [putReservation]: PUT /travels/reservations/{reservation-id}
TravelsApi-->>-Front: 201 ReservationRepresentation
Front->>+TransactionsApi: [createTrasanction]: POST /transactions
TransactionsApi->>+Stripe: créer un PayementIntent
Stripe-->>-TransactionsApi: PayementIntent
TransactionsApi->>+Kafka: publishReservation
TransactionsApi-->>-Front: 201 [clientSecret]
TravelsApi-->>Kafka :Ecoute [RESERVATION-TOPIC]
TravelsApi-->>TravelsApi: Mettre à jour la réservation
Front-->>+Stripe: Rediriger vers le forulaire de paiement
Stripe-->>-Client: Afficher le forulaire de paiement
Client->>+Stripe: Renseigner les informations bancaires puis valider le paiement
Stripe-->>Stripe: Enregistrer et effectuer le paiement
Stripe-->>-Client: Afficher le récapitulatif de paiement ainsi que le message d'information
Stripe->>+TransactionsApi: [handleStripeEvent]: POST /transactions/web-hook
TransactionsApi-->>TransactionsApi: Mettre à jour la transaction
TransactionsApi->>+Kafka: publishReservation
TransactionsApi->>+Kafka: publishMail
TransactionsApi-->>-Stripe: 200
TravelsApi-->>Kafka :Ecoute [RESERVATION-TOPIC]
TravelsApi-->>TravelsApi: Mettre à jour la réservation
CommunicationApi-->>Kafka :Ecoute [MAIL-TOPIC]
CommunicationApi-->>CommunicationApi: Envoyer un Mail d'information au client
2. Consulter mes réservations en tant que client
3. Consulter les réservations en tant que partenaire
4. Annuler une réservation en tant que client
5. Messagerie
Ce parcours pourra être initié depuis la page de détails du voyage ou à partir d’une réservation à venir. Tous les échanges de messages resteront accessibles depuis la section Mes messages.
sequenceDiagram
actor User_PRO
actor Client
Client ->>+ Front: Contacter un partenaire
Front ->>+ ControllerApp: Mutation GraphQL addConversation
ControllerApp ->>+ CommunicationAPI: [addConversation]: POST /communication/conversations
CommunicationAPI -->> CommunicationAPI: enregistre la conversation
CommunicationAPI -->>- ControllerApp: 201 conversationRepresentation
ControllerApp -->>- Front : OK
Front -->> Front: Redirige vers le formulaire de chat
Client ->>+ Front: Envoyer un message au partenaire
Front ->>+ ControllerApp: Mutation GraphQL sendMessage
ControllerApp ->>+ Kafka: Publier le message dans [conversation.message.sent]
CommunicationAPI -->> Kafka :Ecoute [conversation.message.sent]
CommunicationAPI -->> CommunicationAPI: Consomme et enregistre le message
CommunicationAPI ->>+ Kafka: publier une notification dans [notification.created]
NotificationsApi -->> Kafka :Ecoute [notification.created]
NotificationsApi -->> NotificationsApi: Consomme et enregistre la notification
alt Si receverId = null
NotificationsApi ->>+ Kafka: Publier une notification dans [notification.sent] avec l'id de l'établissement
ControllerApp -->> Kafka :Ecoute [notification.sent]
ControllerApp ->>+ Front : Notifier toutes les personnes affectées à 'établissement via websocket
else Si receverId != null
NotificationsApi ->>+ Kafka: Publier une notification dans [notification.sent] avec receverId
ControllerApp -->> Kafka :Ecoute [notification.sent]
ControllerApp ->>+ Front : Notifier toutes les personnes affectées à 'établissement via websocket
end
alt Si User_PRO est connecté
Front -->> User_PRO : Afficher la notification
else Si User_PRO est NON connecté, au moment de connexion
Front ->>+ ControllerApp: Mutation GraphQL listNotifications
ControllerApp ->>+ NotificationsApi: [listNotifications] GET /notifications
NotificationsApi -->>- ControllerApp: 200 listNotificationResume
ControllerApp ->>+ Front : envoyer listNotificationResume
Front -->> Front: MAJ listNotification dans le contexte
Front -->> User_PRO : Afficher la notification
end
alt Si la personne connecté User_PRO
User_PRO ->>+ Front: Afficher la liste des converssations non affectées
User_PRO ->>+ Front: M'assigner la converssation
Front ->>+ ControllerApp: Mutation GraphQL putConversation
ControllerApp ->>+ CommunicationAPI: [putConversation]: PATCH /communication/conversations/{conversation-id}
CommunicationAPI -->> CommunicationAPI: assigner la converssation au User_PRO
CommunicationAPI -->>- ControllerApp: 201 conversationRepresentation
ControllerApp ->>+ Kafka: Publier le message dans [notification.deleted]
NotificationsApi -->> Kafka :Ecoute [notification.deleted]
NotificationsApi -->> NotificationsApi: Supprimier la notification
ControllerApp -->>- Front : OK
end
User_PRO ->>+ Front: Consulter la converssation
Front ->>+ ControllerApp: Mutation GraphQL updateMessage
ControllerApp ->>+ Kafka: Publier le message dans [conversation.message.status]
CommunicationAPI -->> Kafka :Ecoute [conversation.message.status]
CommunicationAPI -->> CommunicationAPI: MAJ le statut du message
ControllerApp ->>+ Kafka: Publier le message dans [notification.deleted]
NotificationsApi -->> Kafka :Ecoute [notification.deleted]
NotificationsApi -->> NotificationsApi: Supprimier la notification