Architecture

Automatisation des défis

Sélection automatique des défis hebdomadaires et mensuels avec Docker Cron.

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 = true pour 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 up démarre le profil dev, y compris le service back-cron
  • make prod démarre le profil prod, y compris le service back-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).