Skip to content

Passer la clé de budget premium à high et aligner les libellés de budget et de durée #133

Closed

Description

@PaulThiberville

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 valeur premium de taxonomies.budgets devient high. Les clés free, low et medium ne 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) gardent premium.
  • Libellés français (labels/fr.ts) identiques au tableau Taxonomie de Filtres-et-Recherche et aux valeurs de mappings.filterIcons.budget et mappings.filterIcons.duration de 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 toucher 0001_init.sql. L'énuméré plan garde premium, duration_bucket ne change pas.
  • Les schémas Zod (RouteSearchQuery, schéma de parcours), les types d'analytics (filters_applied.budgets), le seed et GET /v1/config suivent par dérivation.

Critères d'acceptation

  • taxonomies.budgets vaut free, low, medium, high ; plans et routes.access gardent premium
  • Libellés de budget et de durée de packages/shared identiques mot pour mot à Filtres-et-Recherche › Taxonomie (D-010) et aux valeurs de mappings.filterIcons.budget et .duration de tokens.json, vérifiés par un test
  • Nouvelle migration de renommage, 0001_init.sql inchangé ; une ligne premium existante devient high (vérification décrite dans la PR)
  • Une génération Drizzle lancée après la migration ne produit aucun diff (instantané meta aligné sur le renommage)
  • Le schéma de recherche accepte budgets[]=high et refuse budgets[]=premium en validation_error (test)
  • GET /v1/config expose la clé high et les nouveaux libellés

Notes techniques

  • Relevé sur main (3b8ed72) : packages/shared/src/taxonomies.ts (budgets), src/labels/fr.ts, commentaire de src/thresholds.ts ; apps/api/src/db/schema.ts (budgetBucket) ; migrations dans apps/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 inverse RENAME 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/tokens ne compare filterIcons aux libellés de shared que 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

  1. added this to the v0.2 milestone on Sep 25, 2026
  2. PaulThiberville commented on Sep 25, 2026

    @PaulThiberville
    CollaboratorAuthor

    🔨 Démarrage — branche issue/133-budget-high-key. Plan :

    1. packages/shared : taxonomies.budgets passe premium → high (plans et routes.access inchangés), libellés de budget et de durée alignés sur D-010, commentaire de thresholds.ts ; tests des libellés (texte du wiki) et comparaison avec mappings.filterIcons.budget / .duration de tokens.json ; test du schéma de recherche (high accepté, premium refusé).
    2. apps/api : migration custom ALTER TYPE budget_bucket RENAME VALUE 'premium' TO 'high', instantané meta aligné, vérifiée sur la base locale (ligne premium → high, génération suivante vide) ; test /v1/config sur la clé high et les libellés.
      PR de niveau 2.
  3. IlanAMG commented on Sep 25, 2026

    @IlanAMG
    Member

    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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions