Skip to content

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