Le corbeau du soir

Exercice 4 sur 6 du chapitre 7 · 250 XP · 5 objectifs vérifiés par des tests

Notions abordées : Scheduler#[AsSchedule]RecurringMessageTâche planifiée

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

  1. Dans CorbeauDuSoir, déclarez le calendrier de la taverne, sous le nom soir : chaque jour à 18 h, un ResumeDuSoir.
  2. 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.