DEV Community

Cover image for Un jour offert toutes les 5 locations : comment je garde le compte juste
Amine Affif
Amine Affif

Posted on

Un jour offert toutes les 5 locations : comment je garde le compte juste

Sur une plateforme de location de véhicules, j'ai mis en place un programme de fidélité. La règle tient en une ligne : toutes les 5 locations, un jour offert, automatiquement.

Sur le papier, c'est simple. En pratique, ça se complique dès qu'il y a une annulation, une location qui ne se termine pas, ou deux demandes en même temps.

Pour ce genre de calcul, je pars d'un principe : ne jamais stocker un compteur à la main. Le déduire de l'historique.

// le solde est calculé, jamais modifié directement
const terminees = locations.filter((l) => l.statut === "terminee").length;
const joursGagnes = Math.floor(terminees / 5);
const joursUtilises = recompenses.length;
const solde = joursGagnes - joursUtilises;
Enter fullscreen mode Exit fullscreen mode

Un compteur stocké peut se désynchroniser : une location annulée après coup, une mise à jour qui échoue à moitié. Un solde calculé depuis les locations réelles reste cohérent avec elles par construction.

Trois cas à traiter explicitement.

  • Une location annulée ne compte pas. On ne compte que celles dont le statut est « terminée ».
  • Un jour offert ne se consomme qu'une fois. Chaque utilisation est enregistrée, et le solde en tient compte.
  • Deux demandes en même temps. L'enregistrement de l'utilisation doit être atomique, dans une transaction ou avec une contrainte d'unicité. Sinon le même jour offert peut être accordé deux fois.

Le résultat visible pour le client : le programme s'applique tout seul, sans qu'il ait rien à demander.

Amine Affif, développeur full-stack à Paris. amineaffif.com

Top comments (0)