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 :
- Compare la collection Qdrant courante à la source (cache local ou API)
- Ajoute les nouvelles, met à jour les modifiées, retire les disparues
- 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é
/admin/services: santé Qdrant + count par collection (avant / après devrait avoir bougé)- Tester autocomplete : sur
/playdu jeu concerné, taper@<carte récente>→ cartes ressortent - Tester une question synergy : "donne-moi les nouvelles cartes du set X" → l'oracle doit pouvoir les citer
- 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.