Gorm veut savoir, chaque soir, ce qui l'attend le lendemain : combien de tables, combien d'aventuriers. De quoi prévoir les provisions, et le nombre de tonneaux.
Personne ne déclenchera ce résumé : il doit partir tout seul, tous les jours à 18 h.
Votre mission
- Dans
CorbeauDuSoir, déclarez le calendrier de la taverne, sous le nomsoir: chaque jour à 18 h, unResumeDuSoir. - Dans
ResumeDuSoirHandler, comptez les réservations de demain et envoyez le résumé à Gorm :Demain : 2 tables, 6 aventuriers.;- au singulier quand il n'y a qu'une table ou qu'un aventurier ;
Demain : aucune réservation. Repos !si la journée est libre.
Le Scheduler, en deux idées
Un calendrier (Schedule) dit quoi envoyer et quand. Un déclencheur (trigger) décrit le rythme : toutes les heures, tous les jours à 18 h, tous les lundis…
(new Schedule())->add(RecurringMessage::every('1 day', new ResumeDuSoir(), from: '18:00'));
Le message part ensuite dans le bus, comme les autres : c'est un handler ordinaire qui le traite. Planifier et traiter restent deux choses séparées.
Qui déclenche l'heure ?
Un worker, là encore. #[AsSchedule('soir')] crée un transport scheduler_soir, que l'on consomme comme une file :
messenger:consume scheduler_soir
Le worker regarde l'heure et lâche le message quand elle est venue. Dans l'aperçu, rien ne tournera à 18 h : c'est la planification elle-même que vos tests vérifient.