Projet

Général

Profil

Development #60255

[API] Nouveau endpoint pour gérer l'inscription à un unique événement récurrent

Ajouté par Mikaël Ates il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
04 janvier 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

/api/agendas/recurring-events/fillslots/ permet de gérer les réservations à tous les événements récurrents d'un ou plusieurs agendas. Lors de la réservation d'un nouveau slot, ou d'un désistement d'un slot booké, il faut indiquer tous les autres slots déjà booké pour ne pas les déréserver.

Afin de permettre la mise en oeuvre de cas d'usage basiques il est utile d'avoir un endpoint permettant de (dé)réserver un unique événement récurrent sans avoir à se soucier des autres événements récurrent de son agenda.

Pour un événement non récurrent le déroulé est le suivant :
  • Listing des événements d'un agenda avec : /api/agenda/<agenda_slug>/datetimes/
  • La sélection d'un événement permet d'obtenir api_fillslot_url et l'appel de réservation de fait sur /api/agenda/<agenda_slug>/fillslot/<event_slug>/ (avec user_external_id)
  • La réservation permet d'obtenir api_cancel_url et l'appel d'annulation se faire sur /api/booking/<booking_id>/cancel/
  • (La réservation permet d'obtenir api_cancel_accept/api_cancel_suspend et la bascule de liste se fait respectivement sur /api/booking/<booking_id>/accept/ et /api/booking/<booking_id>/suspend/)
Pour un événement récurrent le déroulé pourrait être le suivant :
  • Listing des événements d'un agenda avec : /api/agendas/recurring-events/?agendas=<agenda_slug>
  • La sélection d'un événement permettrait d'obtenir api_fillslot_url
    • /api/agenda/<agenda_slug>/fillslot/<event_slug>/ doit sûrement permettre de fonctionner pour booker une occurrence d'un événement récurrent, en indiquant l'id de l'occurrence (<slug_event>--<date>)
    • ce serait donc un autre endpoint comme /api/agenda/<agenda_slug>/recurring-fillslot/<event_slug>/
      • <event_slug> serait le slug de l'événement (pas d'un slot)
      • l'appel réserverait tous les datetimes ouverts sur tous les slots de l'événement récurrent
      • possibilité de spécifier date_start et date_end
      • user_external_id
  • La réservation permet d'obtenir la liste de tous les datetimes bookés, avec pour chacun les différents url du booking cancel, accept, suspend et la liste principale/attente
  • La réservation permet d'obtenir api_cancel_url
    • L'annulation doit être possible pour tous les bookings sur un événement récurrent
    • ce serait potentiellement le même endpoint /api/agenda/<agenda_slug>/recurring-fillslot/<event_slug>/ avec un paramètre unbook
      • <event_slug> serait le slug de l'événement (pas d'un slot)
      • possibilité de spécifier date_start et date_end
      • user_external_id

(L'extension de ce endpoint pour gérer la bascule entre liste principale et d'attente de tous les datetimes fera l'objet d'un autre ticket.)


Fichiers

Révisions associées

Révision 29413e3a (diff)
Ajouté par Valentin Deniaud il y a plus de 2 ans

trivial: remove invalid choice in serializer field (#60255)

Révision ad019b09 (diff)
Ajouté par Valentin Deniaud il y a plus de 2 ans

api: add action parameter to recurring fillslots endpoint (#60255)

Révision 58ade5be (diff)
Ajouté par Valentin Deniaud il y a plus de 2 ans

api: add book action to recurring fillslots endpoint (#60255)

Révision 6b22764a (diff)
Ajouté par Valentin Deniaud il y a plus de 2 ans

api: add unbook action to recurring fillslots endpoint (#60255)

Historique

#1

Mis à jour par Valentin Deniaud il y a plus de 2 ans

  • Assigné à mis à Valentin Deniaud

J'ai commencé à regarder et j'ai une autre idée qu'elle est mieux, je vais ajouter un paramètre obligatoire ?action à l'API /agendas/recurring-events/fillslots/, actuellement ça fait '?action=update' et donc je vais ajouter 'book' et 'unbook' pour tes deux besoins. Ensuite on pourra ajouter 'accept', 'suspend' etc.

En fait c'est moi qui avait peur de complexifier outrageusement le code de l'API de réservation actuelle déjà suffisamment complexe, mais je me suis rendu compte que ce n'était pas si horrible, même que c'était vachement moins de code que d'avoir un deuxième endpoint, et que ça aurait ensuite été la galère à maintenir pour que les deux soient raccord.

#3

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Dans le module il y déjà une fonction qui s'appelle get_events_from_slots, ici tu rajoutes une méthode get_events_from_slots, ça simplifierai la lecture de la renommer genre en _get_events_from_slots, ou encore mieux un nom complètement différent, ce serait moins confusionnant à la lecture et au git grep.

#4

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution proposée à Solution validée

Et après zou.

#5

Mis à jour par Valentin Deniaud il y a plus de 2 ans

Emmanuel Cazenave a écrit :

Dans le module il y déjà une fonction qui s'appelle get_events_from_slots, ici tu rajoutes une méthode get_events_from_slots, ça simplifierai la lecture de la renommer genre en _get_events_from_slots, ou encore mieux un nom complètement différent, ce serait moins confusionnant à la lecture et au git grep.

Bien vu ce nommage était malheureux, j'ai renommé en get_event_recurrences.

#6

Mis à jour par Valentin Deniaud il y a plus de 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 6b22764afda449dcc983afdd7c724d9282277c72
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jan 6 11:01:35 2022 +0100

    api: add unbook action to recurring fillslots endpoint (#60255)

commit 58ade5be61f75b06fd6b0763c41db1ee7e84425b
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jan 6 11:01:08 2022 +0100

    api: add book action to recurring fillslots endpoint (#60255)

commit ad019b0956e0b326b4e878e2652c9991449e4f2f
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jan 6 10:45:34 2022 +0100

    api: add action parameter to recurring fillslots endpoint (#60255)

commit 29413e3a35c4354499a4d20919aacbbdf0be5d72
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jan 6 10:59:59 2022 +0100

    trivial: remove invalid choice in serializer field (#60255)
#7

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#8

Mis à jour par Transition automatique il y a environ 2 ans

Automatic expiration

Formats disponibles : Atom PDF