Projet

Général

Profil

Development #83544

plages libres, interdire d'avoir plus de deux pointages par réservation

Ajouté par Valentin Deniaud il y a 6 mois. Mis à jour il y a 5 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
15 novembre 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Actuellement, l'interface interdit d'ajouter plus de deux pointages.

Mais un pointage pourra également être créé via l'API. Une race condition conduisant à avoir trois pointages est très peu probable, mais puisque la conséquence serait un plantage de la plupart des vues, nécessitant une intervention manuelle en db, cette possibilité doit être réfléchie.

Il faudrait envisager une contrainte au niveau de la base de données.

Actuellement le modèle pointage BookingCheck a une clé secondaire vers le modèle réservation Booking, ce qui permet à un Booking d'avoir N BookingCheck.

J'avais lors de l'implem initiale essayé d'avoir Booking qui contient deux OneToOneField vers BookingCheck, mais ça se mariait fort mal avec l'ORM.

Deuxième solution, avoir une colonne en plus de BookingCheck, par exemple un booléen first, puis la contrainte d'unicité (booking, first), ainsi pour un même Booking on ne pourra avoir que BookingCheck(booking, first=True) et BookingCheck(booking, first=False).

Ça introduit une distinction forte entre premier et deuxième pointage qui n'existe pas actuellement, je ne sais pas si ce sera utile ou pas.

Troisième solution, maintenir un compteur des pointages liés à une réservation avec un trigger, et refuser la création quand ça dépasse 2 ?

Historique

#1

Mis à jour par Valentin Deniaud il y a 5 mois

Valentin Deniaud a écrit :

Deuxième solution, avoir une colonne en plus de BookingCheck, par exemple un booléen first, puis la contrainte d'unicité (booking, first), ainsi pour un même Booking on ne pourra avoir que BookingCheck(booking, first=True) et BookingCheck(booking, first=False).

J'ai vu la lumière ce booléen existe déjà, c'est le booléen qui indique la présence, donc ce ticket c'est juste le pendant db de #83505.

#2

Mis à jour par Robot Gitea il y a 5 mois

  • Statut changé de Nouveau à En cours

Valentin Deniaud (vdeniaud) a ouvert une pull request sur Gitea concernant cette demande :

#3

Mis à jour par Robot Gitea il y a 5 mois

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

Mis à jour par Robot Gitea il y a 5 mois

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

Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :

#5

Mis à jour par Robot Gitea il y a 5 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Valentin Deniaud (vdeniaud) a mergé une pull request sur Gitea concernant cette demande :

#6

Mis à jour par Transition automatique il y a 5 mois

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

Mis à jour par Transition automatique il y a 3 mois

Automatic expiration

Formats disponibles : Atom PDF