Automatisation des défis
Automatisation des défis
Le projet automatise les deux sélections suivantes côté backend Symfony :
- défi hebdomadaire : 1 combo tiré aléatoirement chaque lundi
- défis mensuels : jusqu'à 10 combos éligibles par catégorie, le 1er de chaque mois
Cette automatisation est exécutée par un service Docker dédié : back-cron (et back-cron-prod en profil production).
Commandes Symfony
Les tâches planifiées appellent les commandes suivantes :
php bin/console app:challenges:weekly
php bin/console app:challenges:monthly
Détail de app:challenges:weekly
- remet tous les
isFigureOfTheWeekàfalse - sélectionne un combo aléatoire
- positionne ce combo en figure de la semaine
Détail de app:challenges:monthly
- crée (ou réutilise) une période nommée
monthly-YYYY-MM - sélectionne jusqu'à 10 combos
isKingOfCableEligible = truepour chaque catégorie - associe ces combos à la période mensuelle
- ne reseed pas une période déjà remplie, sauf avec
--force
Exemples utiles :
# mois courant
php bin/console app:challenges:monthly --no-interaction
# mois explicite
php bin/console app:challenges:monthly --month=2026-04 --no-interaction
# régénération forcée
php bin/console app:challenges:monthly --month=2026-04 --force --no-interaction
Planification Cron
Le fichier de planification est :
back/cron/challenges.cron
Règles en place (timezone Europe/Paris) :
# Chaque 1er du mois à 00:01
1 0 1 * * root cd /app && /usr/local/bin/php bin/console app:challenges:monthly --no-interaction >> /proc/1/fd/1 2>&1
# Chaque lundi à 00:01
1 0 * * 1 root cd /app && /usr/local/bin/php bin/console app:challenges:weekly --no-interaction >> /proc/1/fd/1 2>&1
Services Docker
En environnement Docker :
make updémarre le profildev, y compris le serviceback-cronmake proddémarre le profilprod, y compris le serviceback-cron-prod
Le scheduler tourne en foreground via cron -f.
Vérification et debug
Démarrer/reconstruire le scheduler en développement :
docker compose --profile dev up --build -d back-cron
Suivre les logs :
make logs-back-cron
# ou
docker compose --profile dev logs -f back-cron
Vérifier le process principal du conteneur :
docker compose --profile dev exec back-cron sh -lc 'tr "\000" " " < /proc/1/cmdline; echo'
# attendu: cron -f
Impact API
L'endpoint GET /api/categories/{slug}/combos renvoie en priorité les combos de la période mensuelle courante (monthly-YYYY-MM).
Fallback : si la période du mois n'est pas encore seedée, l'API renvoie le comportement historique (combos éligibles King of Cable de la catégorie).