Une réservation a une vie : demandée par un voyageur, confirmée par la taverne, puis honorée le soir venu. Sauf si quelqu'un l'annule entre-temps. Aujourd'hui, rien ne l'empêche d'être honorée sans avoir été confirmée, ou annulée après le repas.
Pipin a ajouté un statut aux réservations. Plutôt que de semer des if ($statut === …) partout, la taverne va décrire ce cycle de vie une fois, et laisser Symfony le faire respecter.
Le composant Workflow
Un workflow décrit des places (les états possibles) et des transitions (les passages permis de l'une à l'autre). Quand un objet ne peut être qu'à une seule place à la fois, c'est une machine à états (state_machine). Le workflow sait :
- où en est l'objet (
getMarking()) ; - ce qu'on peut faire (
can(),getEnabledTransitions()) ; - faire avancer l'objet (
apply()), et refuser ce qui n'est pas permis.
Votre mission
-
Dans
config/packages/workflow.yaml, décrivez la machine à étatsreservation:Transition depuis vers confirmerdemandeeconfirmeehonorerconfirmeehonoreeannulerdemandeeouconfirmeeannuleeUne nouvelle réservation commence à
demandee, et la place se range dans la propriétéstatut. -
Les réservations du site et celles des guildes (l'API) sont enregistrées
demandee.
Dans la console, workflow:dump reservation --dump-format=mermaid décrit votre machine sous forme de diagramme.