Skip to main content

Mettre à jour les cartes d'un TCG

Mettre à jour les cartes d'un TCG

Dernière mise à jour : 2026-05-10

Page critique — workflow de référence quand un nouveau set sort.

Tableau de référence

TCG Type source Fréquence Workflow
FAB Package npm bundlé Set npm update + build + redeploy AVANT le resync admin (cf. ⚠️ FAB ci-dessous)
MTG Scryfall + Haiku ~3-4×/an download → extract → translate-missing → ingest, dans le container
Lorcana LorcanaJSON.org Set download → ingest → ingest-symbols. ⚠️ DotGG figée nov 2025
Riftbound API Riot live Set fetch → ingest. Pas de rebuild image
TM Local statique Quasi-statique parse-html → ingest
Ark Nova Local statique Quasi-statique slice → extract → ingest

Workflow par TCG

FAB ⚠️ cas spécial

La data FAB est embarquée dans l'image Docker via le package npm. Le resync admin ne voit PAS les nouvelles cartes tant que l'image n'est pas rebuilt.

# 1. Mettre à jour le package localement
npm update @flesh-and-blood/cards @flesh-and-blood/types

# 2. Commit + push
git add package.json package-lock.json
git commit -m "chore(deps): update FAB cards to <version>"
git push

# 3. Attendre que la CI Gitea build/push l'image
# (jobs `test` + `build` dans .gitea/workflows/build.yml)

# 4. Sur Unraid : pull + restart le container
docker compose -f /mnt/user/appdata/boardgame-referee/docker-compose.yml pull app
docker compose -f /mnt/user/appdata/boardgame-referee/docker-compose.yml up -d --force-recreate app

# 5. /admin → bouton "Resync FAB cards"
# Le frontend stream les compteurs added / updated / removed

MTG

# Tout dans le container (les data dirs sont des volumes montés)

# 1. Télécharge le bulk Scryfall (~1 GB)
docker exec boardgame-referee npm run cards:mtg:download

# 2. Extrait + déduplique par oracle_id, version FR
docker exec boardgame-referee npm run cards:mtg:extract

# 3. Traduit les cartes manquantes (Haiku batch ~3000)
docker exec boardgame-referee npm run cards:mtg:translate-missing
# (peut prendre 2-3h selon ton quota Haiku)

# 4. Ingest dans Qdrant
docker exec boardgame-referee npm run cards:mtg:ingest

# 5. Si Standard a tourné (rotation), refixer les légalités
docker exec boardgame-referee npm run meta:mtg:fix-legalities

# 6. /admin → bouton "Resync MTG cards" (optionnel — l'ingest a déjà push)

Lorcana

docker exec boardgame-referee npm run cards:lorcana:download
docker exec boardgame-referee npm run cards:lorcana:ingest
docker exec boardgame-referee npm run cards:lorcana:ingest-symbols

# /admin → Resync Lorcana cards (optionnel)

⚠️ Pas relancer la sync méta tant que DotGG ne reprend pas (figée 21 nov 2025).

Riftbound

# 1. Fetch depuis API Riot live
docker exec boardgame-referee npm run cards:riftbound:fetch

# 2. Ingest dans Qdrant
docker exec boardgame-referee npm run cards:riftbound:ingest

# /admin → Resync Riftbound cards (optionnel)

Pas de rebuild image nécessaire (sauf si tu changes le code de normalisation).

Terraforming Mars

docker exec boardgame-referee npm run cards:tm:parse-html
docker exec boardgame-referee npm run cards:tm:ingest

# /admin → Resync TM cards (optionnel)

Ark Nova

# 1. Re-découper les sprites si data change
docker exec boardgame-referee npm run cards:ark-nova:slice

# 2. Re-parse JSON
docker exec boardgame-referee npm run cards:ark-nova:extract

# 3. Push Qdrant
docker exec boardgame-referee npm run cards:ark-nova:ingest

# /admin → Resync Ark Nova cards (optionnel)

Resync depuis l'admin UI

/admin → section "Cartes / TCG" → bouton Resync par TCG.

Appelle POST /api/admin/games/:id/sync-cards qui :

  1. Compare la collection Qdrant courante à la source (cache local ou API)
  2. Ajoute les nouvelles, met à jour les modifiées, retire les disparues
  3. Stream les progrès via EventSource (UI affiche live : added / updated / removed / total)

⚠️ Le bouton Resync ne télécharge PAS une nouvelle source (Scryfall, LorcanaJSON, API Riot, etc.). C'est aux scripts npm run cards:<tcg>:* ci-dessus de faire ça.

Ordre canonique : (1) mettre à jour la source, (2) cliquer Resync.

Quand utiliser quoi

Cas Solution
Source npm bundlée (FAB) maj = build + redeploy obligatoire
Source scriptée (MTG, Lorcana, TM, Ark Nova) maj = docker exec + scripts npm
Source live API (Riftbound) maj = cards:riftbound:fetch puis :ingest, pas besoin de redeploy

Vérifier que ça a marché

  1. /admin/services : santé Qdrant + count par collection (avant / après devrait avoir bougé)
  2. Tester autocomplete : sur /play du jeu concerné, taper @<carte récente> → cartes ressortent
  3. Tester une question synergy : "donne-moi les nouvelles cartes du set X" → l'oracle doit pouvoir les citer
  4. Si 0 résultat : vérifier que games.has_card_database (en BDD) pointe sur la collection Qdrant exacte (flesh-and-blood-cards, magic-cards, etc.). Connect à npm run cards:<tcg>:link-game <gameId> si le lien manque.

Restart cache mémoire après gros update

Le cards-cache.ts charge les collections en mémoire au boot. Après un gros update (>1000 cartes), restart le container pour s'assurer que le cache est warm avec la nouvelle data :

docker compose -f /mnt/user/appdata/boardgame-referee/docker-compose.yml restart app

Sinon les autocomplete continueront de servir l'ancienne version mémoire.