Projet

Général

Profil

Development #58446

Gestion des inscriptions - Permettre un filtre subscribed dans les API de récupération et de réservation

Ajouté par Lauréline Guérin 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:
08 novembre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

ticket chapeau #57956

Il faut prendre en compte les inscriptions permises par #58444 dans les API existantes.

Cela va passer par l'ajout d'un paramètre ?subscribed aux API qui nous intéressent, afin de limiter la récupération des évènements et leur réservation aux agendas pour lesquels il existe une inscription.

Ce paramètre prend comme valeur les slugs des catégories concernées séparés par des virgules.


Fichiers

0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch (13 ko) 0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 25 novembre 2021 17:53
0002-api-add-support-for-subscriptions-in-multiple-agenda.patch (14 ko) 0002-api-add-support-for-subscriptions-in-multiple-agenda.patch Valentin Deniaud, 30 novembre 2021 10:51
0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch (12,7 ko) 0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 30 novembre 2021 10:51
0004-api-add-support-for-subscriptions-in-recurring-fills.patch (8,67 ko) 0004-api-add-support-for-subscriptions-in-recurring-fills.patch Valentin Deniaud, 01 décembre 2021 15:21
0002-api-add-support-for-subscriptions-in-multiple-agenda.patch (12,9 ko) 0002-api-add-support-for-subscriptions-in-multiple-agenda.patch Valentin Deniaud, 01 décembre 2021 15:21
0003-api-filter-by-subscriptions-in-recurring-events-list.patch (5,84 ko) 0003-api-filter-by-subscriptions-in-recurring-events-list.patch Valentin Deniaud, 01 décembre 2021 15:21
0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch (13,6 ko) 0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 01 décembre 2021 15:21
0004-api-add-support-for-subscriptions-in-recurring-fills.patch (9,12 ko) 0004-api-add-support-for-subscriptions-in-recurring-fills.patch Valentin Deniaud, 02 décembre 2021 15:28
0002-api-add-support-for-subscriptions-in-multiple-agenda.patch (13,3 ko) 0002-api-add-support-for-subscriptions-in-multiple-agenda.patch Valentin Deniaud, 02 décembre 2021 15:28
0003-api-filter-by-subscriptions-in-recurring-events-list.patch (5,67 ko) 0003-api-filter-by-subscriptions-in-recurring-events-list.patch Valentin Deniaud, 02 décembre 2021 15:28
0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch (15,6 ko) 0001-api-filter-by-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 02 décembre 2021 15:28
0001-fix-order-for-subscriptions-in-multiple-agendas-date.patch (6,45 ko) 0001-fix-order-for-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 13 décembre 2021 14:20
0002-fix-order-for-subscriptions-in-recurring-events-list.patch (5,32 ko) 0002-fix-order-for-subscriptions-in-recurring-events-list.patch Valentin Deniaud, 13 décembre 2021 14:20
0002-fix-order-for-subscriptions-in-recurring-events-list.patch (6,03 ko) 0002-fix-order-for-subscriptions-in-recurring-events-list.patch Valentin Deniaud, 13 décembre 2021 15:17
0001-fix-order-for-subscriptions-in-multiple-agendas-date.patch (6,77 ko) 0001-fix-order-for-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 13 décembre 2021 15:17
0001-fix-order-for-subscriptions-in-multiple-agendas-date.patch (6,86 ko) 0001-fix-order-for-subscriptions-in-multiple-agendas-date.patch Valentin Deniaud, 13 décembre 2021 16:03
0002-fix-order-for-subscriptions-in-recurring-events-list.patch (6,12 ko) 0002-fix-order-for-subscriptions-in-recurring-events-list.patch Valentin Deniaud, 13 décembre 2021 16:03

Révisions associées

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

api: filter by subscriptions in multiple agendas datetimes (#58446)

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

api: add support for subscriptions in multiple agendas fillslots (#58446)

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

api: filter by subscriptions in recurring events list (#58446)

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

api: add support for subscriptions in recurring fillslots (#58446)

Historique

#2

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Description mis à jour (diff)
#3

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

Pour être sûr de bien comprendre le besoin :

Lauréline Guerin a écrit :

  • besoin publik famille, affichage d'un calendrier scolaire complet de septembre à août

Et dans le ticket combo,

je veux récupèrer les inscriptions dans chrono (au lieu de taper un truc dans le champ agenda_references)

Ce que je comprends de tout ça c'est que dans la cellule qui permet à l'usager de faire ces réservations, il y a un besoin de n'afficher que les créneaux des agendas auxquels il est inscrit. Il n'y a jamais besoin d'afficher les inscriptions (?). Du coup est-ce qu'on ne pourrait pas court-circuiter ça en faisant en sorte que l'api /datetimes/ de récupération des créneaux sache ne récupérer que les créneaux réservables car inscrit ? Ça pourrait simplement passer par un paramètre supplémentaire genre ?subscribed=true .

#4

Mis à jour par Lauréline Guérin il y a plus de 2 ans

Ce que je comprends de tout ça c'est que dans la cellule qui permet à l'usager de faire ces réservations, il y a un besoin de n'afficher que les créneaux des agendas auxquels il est inscrit. Il n'y a jamais besoin d'afficher les inscriptions (?).

Oui c'est ça: au lieu de préciser les slugs des agendas à récupérer dans la cellule calendrier, la cellule calendrier récupèrerait les inscriptions en cours et appellerait chrono avec les agendas trouvés.
Idem pour le widget de réservation, le formulaire se chargerait de récupérer les inscriptions en cours pour construire le param agendas passé aux endpoints datetimes et fillslots

Du coup est-ce qu'on ne pourrait pas court-circuiter ça en faisant en sorte que l'api /datetimes/ de récupération des créneaux sache ne récupérer que les créneaux réservables car inscrit ? Ça pourrait simplement passer par un paramètre supplémentaire genre ?subscribed=true .

Il me semble qu'on avait dit que les endpoints datetimes et fillslots devaient rester un peu idiots: qu'ils ne regardent pas les inscriptions et se fient aux agendas passés en param, et que la démarche de réservation s'occupe des vérifications.

Mais on peut en discuter et revenir dessus; si on a une inscription partielle (année incomplète) pour une activité seulement parmi plein, c'est peut-être délicat à contrôler côté démarche:
  • agenda cantine avec inscription du 1/10 au 31/08
  • agenda clae avec inscription du 1/11 au 31/08
  • affichage du widget de réservation le 15/9: on doit désactiver masquer les créneau de cantine avant le 1/10, et les créneaux de clae avant le 1/11

(exemple tordu, mais ça pourrait arriver)
Ca semble en effet plus simple déléguer cette vérification à chrono, qui du coup peut disable les créneaux hors plage d'inscription.

En supposant qu'on parte dans cette direction:

Un param comme ?subscribed=true ne suffirait pas: il faudrait qu'on puisse récupérer les inscriptions d'une ou plusieurs catégories d'agenda
exemple: afficher tous les agendas perisco, mais pas les extrasco

note: possible que ce nouveau param remplace le param agendas ?
on aura 1 agenda cantine par lieu de restauration, et devoir paramétrer agendas=lieu1,lieu2,lieu3,...lieun&subscribed=<val> pour filtrer et ne garder que l'unique agenda qui correspond à l'inscription du user, c'est dommage.

#5

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

  • Assigné à mis à Valentin Deniaud
#6

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

Lauréline Guerin a écrit :

note: possible que ce nouveau param remplace le param agendas ?

Oui tout à fait, dans l'usage Publik Famille ça remplace ?agendas, par contre il faut le garder pour des usages autres je pense.

Voici le patch bien avancé, il manque la gestion de ?subscribed dans /fillslots/ et il y aurait à revoir la partie prefetch.

Et je viens de relire,

on doit désactiver les créneaux

Les créneaux hors de la période couverte par l'inscription doivent être présents dans la réponse mais désactivés ?

#7

Mis à jour par Lauréline Guérin il y a plus de 2 ans

Voici le patch bien avancé, il manque la gestion de ?subscribed dans /fillslots/ et il y aurait à revoir la partie prefetch.

Tu veux faire ça dans ce ticket ou dans un autre ?

Les créneaux hors de la période couverte par l'inscription doivent être présents dans la réponse mais désactivés ?

Vu avec stef, il préfère qu'on ne remonte pas du tout les créneaux hors période d'inscription. Donc le filtre que tu appliques répond au besoin

#8

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

  • Statut changé de Solution proposée à En cours

Lauréline Guerin a écrit :

Tu veux faire ça dans ce ticket ou dans un autre ?

Yep je vais continuer un peu ici

#9

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

Voilà, 0002 pour l'api de réservation d'évènements multiples, est-ce qu'il y en a besoin aussi dans l'api de réservation de semaine type ?

#10

Mis à jour par Lauréline Guérin il y a plus de 2 ans

(pas encore lu les patchs)

est-ce qu'il y en a besoin aussi dans l'api de réservation de semaine type ?

Ha oui, bonne remarque. Et oui, on va en avoir besoin pour la semaine type

(note: peux-tu modifier le titre et la description du ticket ?)

#11

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

  • Sujet changé de Gestion des inscriptions - API récupération des inscriptions à Gestion des inscriptions - Permettre un filtre subscribed dans les API de récupération et de réservation
  • Description mis à jour (diff)
  • Statut changé de Solution proposée à En cours
#12

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

Voilà avec support des API évènements récurrents + factorisation du code.

Un todo reste sûrement de s'intéresser à la date des inscriptions dans l'API qui liste les évènements récurrents, mais je pense qu'on peut voir ça plus tard.

#13

Mis à jour par Lauréline Guérin il y a plus de 2 ans

note: dans le cas où on passe des dates min et/ou max aux endpoints datetimes et fillslots, on pourrait peut-être en profiter pour filtrer les subscriptions, et par conséquent réduire les agendas récupérés ?
(ça peut faire l'objet d'un autre ticket)

0003: des lignes commentées à supprimer

ça serait possible d'ajouter des tests avec des subscriptions sur un même agenda, mais avec des périodes disjointes, et valider que les events entre 2 périodes de suscription ne sont pas réservés ?

#14

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

Lauréline Guerin a écrit :

note: dans le cas où on passe des dates min et/ou max aux endpoints datetimes et fillslots, on pourrait peut-être en profiter pour filtrer les subscriptions, et par conséquent réduire les agendas récupérés ?
(ça peut faire l'objet d'un autre ticket)

Ouep ça sera sûrement le cas majoritaire d'utilisation donc ça vaudrait le coup, je suis chaud pour que ça se fasse dans un autre ticket.

0003: des lignes commentées à supprimer

Hop disparues

ça serait possible d'ajouter des tests avec des subscriptions sur un même agenda, mais avec des périodes disjointes, et valider que les events entre 2 périodes de suscription ne sont pas réservés ?

Il y en avait déjà dans deux tests sur 4, j'ai ajouté une mention en commentaire pour le souligner. Ajouté sur le test fillslots évènements récurrents, pas sur celui qui les liste parce que comme noté plus haut je ne me suis pas préoccupé de la date des inscriptions.

#15

Mis à jour par Lauréline Guérin il y a plus de 2 ans

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

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Statut changé de Solution validée à En cours
#17

Mis à jour par Lauréline Guérin il y a plus de 2 ans

problème de tri détecté en testant:

J'ai un agenda periscolaire avec des events récurrents du 1 septembre 2021 au 31 août 2022
J'ai aussi un autre agenda avec un seul event défini au 31 décembre 2021

J'ai fait une souscription aux deux agendas (d'abord periscolaire, puis l'autre, mais ça n'a pas incidence je pense)
Lorsque je récupère les créneaux avec l'api agenda multiples datetimes, param subscrided=all, le premier event dans data est l'événement du 31 décembre, ce qui fait que dans la cellule calendrier hebdomadaire, les créneaux avant le lundi 27/12 ne sont pas affichés du tout.

on ne fait pas de tri lorsqu'on est en mode subscribed:

        if 'agendas' in request.query_params:
            agenda_querystring_indexes = {
                agenda_slug: i for i, agenda_slug in enumerate(payload['agenda_slugs'])
            }
            entries.sort(
                key=lambda event: (event.start_datetime, agenda_querystring_indexes[event.agenda.slug])
            )

est-ce qu'il serait possible de trier les events par date en mode subscribed ? et si des catégories sont précisées, trier selon l'ordre de la catégorie de l'agenda ? (si plusieurs agendas dans une catégorie, heu, trouver un critère stable)

#18

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

Lauréline Guerin a écrit :

est-ce qu'il serait possible de trier les events par date en mode subscribed ? et si des catégories sont précisées, trier selon l'ordre de la catégorie de l'agenda ?

Yep, voici deux patches en plus que j'intégrerai dans les autres au moment de pousser.

(si plusieurs agendas dans une catégorie, heu, trouver un critère stable)

Oui on y avait pas réfléchi pour le tri par agendas non plus, le seul critère qui vaille c'est d'avoir une clé d'unicité dans le tri je pense, en tout cas j'ai fait ça.

#19

Mis à jour par Lauréline Guérin il y a plus de 2 ans

elif 'subscribed' in request.query_params and payload['subscribed'] != ['all']:

Et pour le mode "toutes les subscriptions" ? :)

#21

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

  • Statut changé de Solution proposée à En cours

Mouais j'ai un test rouge

#23

Mis à jour par Lauréline Guérin il y a plus de 2 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 5269bc60c13c24267e387b13df84c9159ef8117d
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Dec 1 11:42:29 2021 +0100

    api: add support for subscriptions in recurring fillslots (#58446)

commit 270daa22022c8971ff062bd528f37b1bcac064b2
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Dec 1 14:20:20 2021 +0100

    api: filter by subscriptions in recurring events list (#58446)

commit 2e7d87ffe7f89ba6681a8c08f28cab1643377a60
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Wed Dec 1 15:08:18 2021 +0100

    api: add support for subscriptions in multiple agendas fillslots (#58446)

commit 97b0b899afb066021a95212ba0c5bc31d864a3b7
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Nov 25 16:35:55 2021 +0100

    api: filter by subscriptions in multiple agendas datetimes (#58446)
#25

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
#26

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

Automatic expiration

Formats disponibles : Atom PDF