Skip to content

Tag (Tag)

En une phrase : une valeur d'un des vocabulaires multi-valués du catalogue — thème éditorial, contre-indication voyageur, affaire à prendre — gérée par les super-admins et traduite en trois langues.

Rôle métier

Le registre de tags donne au catalogue des propriétés structurées et cherchables tout en laissant les super-admins étendre les vocabulaires sans déploiement. Chaque tag appartient à un vocabulaire (type, énum TagType côté code) :

  • theme — le classement éditorial des activités (nature, gastronomie, romantique…), l'axe de curation des road-trips ;
  • restriction — les contre-indications qu'une activité présente (claustrophobie, vertige, mobilité réduite…), destinées à terme au filtrage selon le profil du voyageur ;
  • thing_to_bring — la liste d'affaires que le voyageur doit emporter (coupe-vent, maillot de bain…), du contenu montré avant la révélation ; agrégée à l'échelle du tour (dédupliquée sur toutes les étapes et tous les plans, sans trahir l'itinéraire) par GET /api/tour/{id}/things-to-bring, lue par le voyageur avant de confirmer son voyage ;
  • suitability — les garanties affirmatives (adapté aux enfants, chiens bienvenus, accessible en fauteuil roulant…), la polarité inverse d'une restriction.

Le slug est l'identifiant machine stable du tag : c'est lui que les filtres et l'import de l'ancien système référencent. Les libellés (name_fr canonique, name_en / name_de optionnels, descriptions idem) sont du contenu localisé côté serveur — le premier de l'application — car un libellé inventé hier par un super-admin ne peut pas vivre dans les traductions embarquées des clients ; ceux-ci retombent sur le français quand une traduction manque. Un tag peut aussi porter une icône (Lucide, optionnelle) que les clients affichent à côté du libellé.

Cycle de vie

Créé et édité par les super-admins (CRUD /api/tags). Le slug et le vocabulaire ne changent jamais après création — renommer un tag, c'est éditer ses libellés. Un tag encore porté par des activités ne peut pas être supprimé (409 ; RESTRICT en base) : il faut d'abord le détacher partout.

Relations métier

RelationSens métier
ÉtiquetageLes activités qui portent ce tag

Règles métier

  • Les valeurs sont des données, les vocabulaires sont du code : ajouter un tag est un geste d'administration ; ajouter un vocabulaire (TagType) est une décision produit qui passe par le code — la recherche, la validation et les clients doivent le connaître.
  • Seuls les vocabulaires multi-valués et non ordonnés entrent au registre. Les propriétés exclusives ou ordinales (difficulté physique, catégorie, statut, standing) restent des colonnes à énum : un tag leur ferait perdre l'ordre et la garantie mono-valeur.
  • La polarité est une propriété du vocabulaire. Une restriction est un avertissement : sa présence exclut, son absence vaut « rien à signaler ». Une suitability est une garantie : sa présence inclut, son absence vaut « inconnu » — jamais « supporté par défaut ». C'est pourquoi wheelchair-accessible n'est pas la négation de la restriction reduced-mobility : accessible / hostile / inconnu sont trois états, et l'accessibilité se déclare, elle ne se déduit pas d'une absence d'avertissement. Le filtrage voyageur en découlera : restrictions = exclusion (NOT EXISTS), suitabilities = inclusion conjonctive (une exigence = un EXISTS).
  • Unicité par vocabulaire (type + slug) : other peut exister à la fois comme thème et comme restriction.
  • Le vocabulaire seedé provient de l'ancien système, nettoyé : les coquilles (« Suprise », « clostrophobie ») et les valeurs parasites se résorbent dans la correspondance chaîne → slug du pipeline d'import, jamais dans le schéma. Les migrations portent ce socle de production ; TagSeeder l'étend en développement avec un catalogue plus riche, sans jamais écraser une valeur existante.

Historique : les thèmes ont d'abord été un énum figé (activity_themes, une ligne par valeur d'énum) avec un vocabulaire « petit, fixe et assumé ». Le vocabulaire hérité a débordé cette hypothèse (party ajouté au coup par coup ; romantic, teambuilding, wellness, other manquants) : les thèmes ont rejoint le registre et l'énum a été supprimé.

Contributors

No contributors

Changelog

No recent changes