feat(back-office): vue du catalogue rangee par categorie #126

Merged
Corentin merged 1 commit from feat/admin-produits-par-categorie into dev 2026-07-31 10:39:01 +02:00
Owner
No description provided.
feat(back-office): vue du catalogue rangee par categorie
All checks were successful
CI / php-lint (push) Successful in 27s
CI / static-tests (push) Successful in 1m3s
CI / js-tests (push) Successful in 34s
CI / secret-scan (pull_request) Successful in 13s
CI / php-lint (pull_request) Successful in 26s
CI / static-tests (pull_request) Successful in 1m1s
CI / js-tests (pull_request) Successful in 32s
CI / secret-scan (push) Successful in 15s
22ec1244f1
Le back-office ne montrait le catalogue qu'en liste plate, avec trois ecarts par
rapport a ce que le client voit sur la borne : l'ordre des categories n'apparaissait
nulle part, les variantes de taille figuraient comme des articles autonomes, et les
menus n'y figuraient pas du tout (ils vivent dans la table menu, pas product).
Repondre a "qu'est-ce que le client voit dans l'onglet Boissons, et dans quel ordre"
supposait de lire le code.

Nouvelle page de LECTURE /admin/products/by-category, meme permission product.read.
La liste plate est conservee : elle reste la seule surface qui gere les variantes
ligne par ligne et porte le CRUD. Les deux vues se renvoient l'une a l'autre.

Mise en oeuvre :
- ProductRepository::basesByCategory() : une requete, meme predicat anti-variante que
  basesOnly/availableForCatalogue, nombre de tailles en sous-requete correlee (pas de
  N+1 quand le catalogue grossit), regroupement en PHP.
- Quatre lectures a nombre fixe : categories (ossature ordonnee qui porte l'ordre des
  onglets), bases groupees, set de rupture calculee RG-T21, menus.
- Produits et menus normalises cote serveur en une seule forme d'article, etat de
  disponibilite deja resolu en trois valeurs distinctes (disponible / rupture auto /
  indisponible) : la vue reste declarative et l'etat directement testable, meme parti
  que l'ADR-0012. Un menu suit la disponibilite de son burger impose, comme la borne.
- Une categorie desactivee est signalee "Masquee sur la borne" avec la phrase qui
  explique pourquoi ses articles marques disponibles restent introuvables a la
  commande. Le lien Modifier n'est rendu que si la permission d'ecriture est detenue
  (un lien qui repondrait 403 n'est pas affiche) ; la garde reste par-route.
- Bloc CSS dedie plutot que reemploi des classes stock-* ; aucun selecteur existant
  modifie. Zero JavaScript, zero attribut style en ligne.

Tests : 17 cas ajoutes (6 depot, 11 controleur) -> 512 unitaires verts, plus un cas
d'integration qui verifie le predicat anti-variante et le compte de tailles contre le
vrai schema seede -> 52 verts. PHPStan L6 propre.

ADR-0013 : pourquoi une seconde lecture plutot qu'un remplacement de la liste plate.
Corentin scheduled this pull request to auto merge when all checks succeed 2026-07-31 10:36:41 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AcadeNice/corentin_wakdo!126
No description provided.