Skip to main content

Resync les cartes d'un TCG

Resync les cartes d'un TCG

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

Pourquoi

Quand un TCG sort un nouveau set,set (ou quandque tu veux refresh la base deaprès cartes (traduction MTG,un fix d'unde bug source)source ou une amélioration de traduction), il faut re-synchroniser la collection Qdrant avec la nouvelle source.

Depuis le 2026-05-11, tout se fait depuis /admin — plus besoin de SSH dans le container pour la majorité des TCG.

/admin → section CartesBases de cartes.

Tu y trouves une ligne par TCG, avec :

    Le nom du jeu et le nombre de cartes actuellement indexées Un badge de fraîcheur coloré :
      🟢 Vert — synchronisé il y a moins de 7 jours 🟡 Jaune — il y a moins de 30 jours 🔴 Rouge — il y a plus de 30 jours, ou jamais synchronisé La durée de la dernière exécution (ex : "dernière exécution : 24 min") Un bouton d'action (voir ci-dessous, deux variantes)

      Les deux modes de resync

      🔁 Mode "Live" — Riftbound uniquement

      Bouton "Resync. (live)" : la source Riftbound est une API Riot interrogeable à chaud. Un clic suffit pour comparer la collection Qdrant avec ce que l'API renvoie en direct, et appliquer le diff (ajouts / TCGmises à jour / suppressions).

      La progression s'affiche inline sous le nom du deck : "Connexion à la source…boutonDiff calculé → Embedding 32/45 → Upsert Qdrant → Terminé : +3 ajouts, 12 modifs, 0 supprimé / 1 280 total".

      C'est rapide (< 2 minutes) car aucune donnée n'est téléchargée localement.

      ⚙️ Mode "Resync"Pipeline" par TCG.MTG,

      CeLorcana, queFAB, faitTerraforming Resync

      Mars, Ark Nova

      LeBouton bouton"Lancer appellele POSTpipeline" /api/admin/games/:id/sync-cards quices TCG nécessitent un téléchargement préalable (bulk Scryfall pour MTG, LorcanaJSON pour Lorcana, package npm pour FAB, données locales pour TM/Ark Nova). Un clic enchaîne automatiquement toutes les étapes :

      1. CompareTéléchargement la collection Qdrant courante avecde la source locale(sauf (cacheFAB fichierqui ouest API live)bundlé)
      2. AjouteExtraction / parsing les(filtrage nouvellesFR, cartesdédoublonnage, etc.)
      3. MetEmbedding à+ jouringestion Qdrant les cartes modifiées (effets erratés, traductions)
      Retire les cartes disparues Stream les progrès via EventSource (UI affiche live : added / updated / removed / total)

      ⚠️ Resync ne télécharge PAS la nouvelle source

      Le boutondétail Resyncdes étapes est affiché dans le nemodal faitde pasprogression qui s'ouvre au clic. Tu y vois :

      • TéléchargementLa Scryfallliste pourdes MTGétapes avec leur statut (en attente / en cours / terminé / erreur) et leur durée
      • TéléchargementUne LorcanaJSON
      console Fetchscrollable APIqui Riotstreame pouren Riftboundtemps

      C'estréel la responsabilitésortie des scripts npm (cf.logs doc[ingest:mtg] technique18 234 "Mettrecartes chargées…)

      Le chrono total dans le footer Un bouton Fermer en haut à jourdroite

      Tu peux fermer la fenêtre

      Le pipeline continue côté serveur même si tu fermes le modal ou navigues ailleurs. Si tu reviens sur /admin plus tard (avant la fin du job ou dans les cartes10 minutes qui suivent), le modal se rouvre automatiquement avec l'historique complet des logs et l'étape en cours.

      C'est utile car certains pipelines sont longs :

      TCG Durée typique FAB ~5-10 min Lorcana ~5-10 min Terraforming Mars ~5 min Ark Nova ~5 min MTG ~25-40 min (download bulk Scryfall + 30k embeddings) Riftbound (mode live) ~1-2 min

      Une seule resync à la fois

      Pour ne pas saturer le GPU d'embedding, un TCG")seul job tourne à la fois (toutes collections confondues). Si MTG est en cours et que tu cliques sur FAB, le bouton FAB est désactivé et un message t'indique qu'un autre pipeline tourne déjà. Attends la fin du premier (ou ferme le modal et fais autre chose pendant que ça mouline).

      Vérifier que ça a marché

      OrdreÀ canoniquela fin du pipeline :

      1. MettreLe badge de fraîcheur passe au vert ("À l'instant" / "Il y a 1 min")
      Le compteur de cartes est mis à jour (ex : 1 280 → 1 312) La durée s'affiche ("dernière exécution : 24 min")

      Pour valider concrètement :

        Va sur /play du jeu en question, ouvre une question et tape @<nom d'une carte du nouveau set> → la carte doit apparaître dans l'autocomplete Pose une question synergy : "Quelles sont les nouvelles cartes du set X ?" → l'oracle doit pouvoir les citer

        En cas d'erreur

        Si une étape échoue, le modal affiche :

          L'sourceétape en erreur en rouge dans la liste Le message d'erreur dans le footer (scriptex npm: spécifique"Erreur après 3 min — cards:mtg:download terminé avec code 1") Les logs complets dans la console (scroll vers le bas pour voir le traceback)

          Le badge de fraîcheur passe au TCG)rouge avec un tooltip qui montre les 60 premiers caractères de l'erreur.

          Que faire ?

            Lis l'erreur dans la console : la plupart du temps c'est un service externe en panne (Scryfall down, LorcanaJSON inaccessible) ou un quota dépassé (Haiku rate-limit pour MTG). PuisAttends cliquerquelques Resyncminutes, depuisrelance /adminle pipeline. Si ça persiste, ouvre les logs container côté Unraid pour voir si une dépendance backend est cassée (Qdrant, TEI embeddings).

            Cas particulier FAB (toujours utile à savoir)

            CommeLe lapackage base FAB@flesh-and-blood/cards est un package npm bundléembarqué dans l'image Docker. (@flesh-and-blood/cards),Le labouton "miseLancer àle jourpipeline" ré-ingère ce que ce package contient, mais pas plus : si un nouveau set est sorti et que le package n'a pas été bumpé côté repo, le resync ne ramènera rien de source"neuf.

            passe

            Workflow parpour vraiment ajouter de nouvelles cartes FAB :

            1. Update le package localement : npm update @flesh-and-blood/cards @flesh-and-blood/types localement
            2. Commit + push → CI Gitea build/pushbuild l'image
            3. Pull image sur Unraid →+ restart container
            Puis Resync

            Sans le rebuild, le container utilisesur toujours l'ancienne version du package, donc Resync ne voit aucune nouvelle carte.

            Vérifier que ça a marché

              Unraid L'UIEnsuite afficheclic lessur compteurs live pendant"Lancer le syncpipeline" Après : tester une autocomplete @<carte récente> dansdepuis /playadmin sur un jeu de la collection Si 0 résultat : vérifier que games.has_card_database (en BDD SQLite) pointe sur la bonne collection Qdrant (flesh-and-blood-cards, magic-cards, etc.)