Aller au contenu

Partage de billet

RD7625 - Partage de billet

Info général

Pour l'émetteur :

  • Partager un ou plusieurs billets à un destinataire (uniquement possible pour les billets unique par match)
  • Une interface doit lui permettre de :
    • Renseigner les coordonnées du destinataire :
      • Nom
      • Prénom
      • Adresse mail
    • Choisir le ou les billets à partager avec le destinataire
    • Valider le partage
  • Lorsque le partage est validé par l'utilisateur, un mail est envoyé au destinataire contenant le lien de partage. Le lien de partage doit rester visible par l'émetteur dans son interface tant que le billet n'a pas été accepté. Ce lien de partage doit pouvoir être copié en version desktop / partagé avec une application de messagerie si version mobile
  • Lorsque le billet est partagé mais pas encore accepté, l'émetteur peut toujours annuler le partage du billet depuis l'interface des billets (annuler plusieurs billets en même temps ?)
  • Lorsque le billet est partagé et accepté par le destinataire, un nouveau QR code est généré et le billet n'est plus accessible par l'émetteur

Pour le destinataire :

  • Recevoir un mail lui indiquant qu'un billet (ou plusieurs) lui a été partagé, avec le lien de partage dans le mail. Le contenu du mail sera défini ultérieurement
  • Après connexion (ou inscription si pas de compte), dans son espace mes billets, il voit les billets qui lui ont été partagés et leur état (billet accepté ou non)
  • Il peut accepter le billet et à partir de ce moment le billet devient valide pour lui et il peut le visualiser. Il devient un billet classique et peut le visualiser, le télécharger ou le partager à son tour

Conception

classDiagram

    class Billet {
        +int new_billet_id
        +int billet_share_request_id
        +String cancelled_reason
        +DateTime cancelled_at
    }

    class Contact {
      +String email
      +String nom
      +String prenom
      [...]
    }

    class BilletShareRequest {
        +int expires_in
        +int source_contact_id
        +int destination_contact_id
        +String share_token
    }

    Billet "1" <--> "0..1" BilletShareRequest : request
    Billet "0..1" <--> "0..1" Billet : new_billet
    BilletShareRequest "0..*" <--> "1" Contact : contact

Lorsque la personne va cliquer sur Partager mon billet avec les informations Nom, Prénom, Émail. Je vais vérifier si un contact avec l'email existe en base de donnée. Si le contact n'existe pas, je vais créer un contact "Fantôme" donc sans compte associé (User). Ensuite, je vais créer un "BilletShareRequest" associé aux billets et contact. L'uuid du BilletShareRequest servira de token pour l'identifier. Au moment de la création du "BilletShareRequest", un email sera automatiquement envoyé au contact associé.

Coté Client, lorsque que le client cliquera sur le lien, il aura le choix se l'accepter ou de le refuser.

  • Dans le cas ou il refuse, alors le BilletShareRequest est tout simplement supprimé.
  • Dans le cas ou il accepte, le Billet est alors annulé avec la raison "Partage de billet". Ensuite un nouveau Billet est généré pour le même produit, puis on associe l'ancien billet au nouveau pour garder une trace. Le model "BilletShareRequest" est devenu inutile donc on peut le supprimer

Cas particulier:

  • Un share_token peut-être associé à plusieurs "BilletShareRequest". Pour pouvoir partager plusieurs billets en même temps.
  • Ne pas proposer le bouton de partage si un Billet possède un "BilletShareRequest" ou si le billet est annulé.