Repository navigation
Passer la clé de budget premium à high et aligner les libellés de budget et de durée #133
Description
Contexte
Epic : #10
Maquette : sans objet — clés et libellés de packages/shared, sans écran propre ; les libellés sont ceux de E-03, validé le 2026-09-23
Filtres-et-Recherche › Taxonomie · Modele-de-Donnees · Ecrans › E-03 · E-03 · D-010, D-016
Découverte de CODE pendant #125, point 5 du commentaire de l'Inbox. packages/shared garde la clé premium pour le palier de budget le plus haut, ainsi que les anciens libellés : « Petit budget », « Moyen », « Premium » pour le budget, « 1 à 2 h », « Demi-journée », « Journée », « Week-end » pour la durée. D-010 (libellés en montants et en heures) et D-016 (clé high, décision d'Ilan du 2026-09-23) les ont remplacés. La clé est persistée : l'énuméré Postgres budget_bucket d'apps/api/src/db/schema.ts est tiré de taxonomies.budgets, et 0001_init.sql l'a créé avec premium.
Ce travail figurait jusqu'ici dans les critères de #29, un ticket d'écran mobile. Il en sort pour débloquer #25 (API de recherche) et #29 sans attendre l'écran, et pour isoler la migration dans une PR de niveau 2.
Comportement attendu
packages/shared: la valeurpremiumdetaxonomies.budgetsdevienthigh. Les clésfree,lowetmediumne changent pas, pas plus que les clés de durée (1_2h,half_day,full_day,weekend). L'abonnement (plans) et l'accès des parcours (routes.access) gardentpremium.- Libellés français (
labels/fr.ts) identiques au tableau Taxonomie de Filtres-et-Recherche et aux valeurs demappings.filterIcons.budgetetmappings.filterIcons.durationde tokens.json : budget « Gratuit », « Jusqu'à 25 € », « 25 à 70 € », « Plus de 70 € » ; durée « Jusqu'à 2 h 30 », « 2 h 30 à 5 h », « 5 à 12 h », « Plus de 12 h ». - Base : une nouvelle migration renomme la valeur de l'énuméré (
ALTER TYPE budget_bucket RENAME VALUE 'premium' TO 'high') sans toucher0001_init.sql. L'énuméréplangardepremium,duration_bucketne change pas. - Les schémas Zod (
RouteSearchQuery, schéma de parcours), les types d'analytics (filters_applied.budgets), le seed etGET /v1/configsuivent par dérivation.
Critères d'acceptation
-
taxonomies.budgetsvautfree,low,medium,high;plansetroutes.accessgardentpremium - Libellés de budget et de durée de
packages/sharedidentiques mot pour mot à Filtres-et-Recherche › Taxonomie (D-010) et aux valeurs demappings.filterIcons.budgetet.durationde tokens.json, vérifiés par un test - Nouvelle migration de renommage,
0001_init.sqlinchangé ; une lignepremiumexistante devienthigh(vérification décrite dans la PR) - Une génération Drizzle lancée après la migration ne produit aucun diff (instantané
metaaligné sur le renommage) - Le schéma de recherche accepte
budgets[]=highet refusebudgets[]=premiumenvalidation_error(test) -
GET /v1/configexpose la cléhighet les nouveaux libellés
Notes techniques
- Relevé sur
main(3b8ed72) :packages/shared/src/taxonomies.ts(budgets),src/labels/fr.ts, commentaire desrc/thresholds.ts;apps/api/src/db/schema.ts(budgetBucket) ; migrations dansapps/api/src/db/generated/migrations/. - drizzle-kit ne renomme pas une valeur d'énuméré : il recréerait le type. Migration écrite à la main (
pnpm --filter api db:generate --custom --name=…), puis instantané aligné pour que la génération suivante soit vide. - Niveau de risque attendu : 2 (migration d'une valeur persistée, réversible). Label
level:2, revue OWASP ciblée, retour arrière décrit dans la PR : migration inverseRENAME VALUE 'high' TO 'premium'avec le retour du code, jamais l'un sans l'autre. Validation d'Ilan avant la production. - Staging : la migration s'applique au déploiement depuis
main. La base de staging n'a pas de parcours aujourd'hui. - Le générateur de
packages/tokensne comparefilterIconsaux libellés desharedque pour les groupes qui ont des icônes. Budget et Durée n'en ont pas : ce ticket ne le touche pas. - Débloque Exposer GET /routes/search et /count : bbox, filtres, tri, clusters #25 (
budgets[]=high) et Implémenter les chips rapides et le panneau de filtres complet (E-03) #29 (libellés des chips et du panneau).
Activity
PaulThiberville commentedon Sep 25, 2026
🔨 Démarrage — branche
issue/133-budget-high-key. Plan :packages/shared:taxonomies.budgetspassepremium→high(plansetroutes.accessinchangés), libellés de budget et de durée alignés sur D-010, commentaire dethresholds.ts; tests des libellés (texte du wiki) et comparaison avecmappings.filterIcons.budget/.durationde tokens.json ; test du schéma de recherche (highaccepté,premiumrefusé).apps/api: migration customALTER TYPE budget_bucket RENAME VALUE 'premium' TO 'high', instantanémetaaligné, vérifiée sur la base locale (lignepremium→high, génération suivante vide) ; test/v1/configsur la cléhighet les libellés.PR de niveau 2.
IlanAMG commentedon Sep 25, 2026
Prérequis de #134 (D-053, https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : le générateur doit accepter qu'une seule valeur de Budget ait une icône (« Gratuit » →
tag).chore(process): block token drift only for generated theme files
feat(tokens): map the icon of « Gratuit » among text-only budgets
chore(process): block token drift only for generated theme files