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é :

  1. ouvre back/combos.csv (UTF-8, avec ou sans BOM)
  2. saute la ligne d'en-tête
  3. charge en mémoire toutes les catégories, grabs et combos existants
  4. 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
  5. synchronise les catégories : retire celles absentes du CSV, ajoute les nouvelles
  6. enregistre en base (ou simule avec --dry-run)
  7. 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
ColonneDescription
idIgnoré à l'import (non stable entre environnements)
nameNom du combo
slugClé de matching - doit être unique
descriptionDescription textuelle
categoriesNom de la catégorie (air trick, Flat, Kicker, jib)
difficulty_valueDifficulté numérique décimale (ex: 4.5)
sub_familySous-famille technique (ex: AITRICK_RAILEY)
approachApproche (Heelside, Toeside)
grab_nameNom 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