Architecture
Import des combos
Import des combos depuis le fichier source combos.csv.
Import des combos
Les combos sont synchronisés depuis le fichier back/combos.csv (source de vérité) via la commande Symfony app:import-combos.
Principe
La commande suit ce déroulé :
- ouvre
back/combos.csv(UTF-8, avec ou sans BOM) - saute la ligne d'en-tête
- charge en mémoire toutes les catégories, grabs et combos existants
- pour chaque ligne du CSV, matche par
slug:- si le combo existe → mise à jour (name, description, difficulté, subFamily, approach, catégories, grab)
- sinon → création
- synchronise les catégories : retire celles absentes du CSV, ajoute les nouvelles
- enregistre en base (ou simule avec
--dry-run) - optionnellement, supprime les combos absents du CSV (
--purge)
Format du CSV
Le fichier back/combos.csv contient 9 colonnes :
id,name,slug,description,categories,difficulty_value,sub_family,approach,grab_name
| Colonne | Description |
|---|---|
id | Ignoré à l'import (non stable entre environnements) |
name | Nom du combo |
slug | Clé de matching - doit être unique |
description | Description textuelle |
categories | Nom de la catégorie (air trick, Flat, Kicker, jib) |
difficulty_value | Difficulté numérique décimale (ex: 4.5) |
sub_family | Sous-famille technique (ex: AITRICK_RAILEY) |
approach | Approche (Heelside, Toeside) |
grab_name | Nom exact du grab lié (doit exister dans la table grab) |
Commande
Depuis la racine du dépôt :
make import-combos
Ou directement dans le conteneur back :
docker compose --profile dev exec back php bin/console app:import-combos
Options :
# simuler sans persister
php bin/console app:import-combos --dry-run
# supprimer les combos absents du CSV (attention : supprime les relations utilisateur)
php bin/console app:import-combos --purge
Comportement
L'import est non destructif par défaut : un combo absent du CSV reste en base. Utiliser --purge pour le retirer.
Le slug est toujours lu depuis le CSV ; il n'est jamais recalculé depuis le nom. C'est ce qui permet de gérer les doublons cross-catégorie (ex: 180-front-flat et 180-front-kicker pour le même nom dans deux catégories différentes).
Données requises en amont
Les grabs (back/grabs.csv) doivent être importés avant les combos si des combos référencent un grab_name :
make import-grabs
make import-combos