5.6 KiB
2026-06-18 — Session : page login, refonte UI admin, humanisation, P4 commande
Auteur : BYAN. Retrospective de session. Apres la session infra/doc/E2E du 2026-06-17, cette session a porte sur le front (pages auth), une refonte du back-office pour des equipiers non-techniques (UX + UI), l'humanisation des libelles, et l'amorce du domaine P4 commande (creation + encaissement cote API).
Contexte de depart
Back-office P3 complet et merge. dev propre. Pistes ouvertes : E2E-CI, page login
signalee comme "moche", domaine P4 commande.
Ce qui a ete livre (PR mergees sur dev)
| PR | Objet |
|---|---|
| #48 | Relooking des pages auth (login / forgot / reset) : .login-card, logo reel, .form-input, .btn. La page login servie via layout.php (passe sur admin.css). |
| #49 | Design system back-office (direction A+C, lot 1) : shell en grille sidebar/topbar/content, tokens (jaune Wakdo doux, ombres, rayons), .sidebar-item, .tile, .alert. |
| #50 | Dashboard donnees reelles (lot 2) : tuiles KPI alimentees par StatsRepository (produits dispo, categories, menus, stock critique). |
| #51 | Fix borne : logo d'en-tete centre (etait a droite). |
| #52 | Modal de re-autorisation PIN : le PIN d'action sensible devient un modal au clic (email pre-rempli), au lieu d'un fieldset inline. CSP-safe (pin-modal.js). |
| #54 | Humanise les libelles restants : Slug -> Reference, Delta -> Variation, Acteur -> Auteur (vues + messages de validation + tests). |
| #55 | P4 chunk 1a : creation de commande (OrderRepository::createPending, RG-5 etapes 1-4, calcul RG-4, numero K+id, idempotence) + migration service_tag (chevalet, B4). |
| #56 | Fix : logo reel dans la sidebar (un "W" dessine a la main avait ete introduit ; remplace par logo.png + mot-symbole, comme la page login). |
| #57 | P4 chunk 1b : encaissement (OrderController POST /api/orders + /{number}/pay, OrderRepository::pay, transition gardee -> paid + decrement de stock atomique RG-T20, idempotence). |
| #58 | CI : retire le job auto-merge redondant (bruit HTTP 405). En cours de merge a la redaction. |
Decisions notables
- E2E-CI abandonne. Le log reel du runner a montre
Cannot connect to the Docker daemon: le runner de prod (forgejo_forgejo_internal) n'expose pas le socket Docker aux jobs, et les jobs se repartissent sur plusieurs runners. L'E2E reste manuel viatests/e2e/run.sh. Le`s emulations locales contre le mauvais runner tournaient a blanc. - UI pour equipiers non-techniques. Zero jargon dev dans les ecrans ; le PIN (action sensible) est un modal au moment de l'action, pas un champ inline ; direction visuelle "Mix A+C" (neutre + accent jaune parcimonieux).
- P4 commande, regles tranchees :
order_number=K+ id auto-increment (plus simple queK-AAAA-MM-JJ-NNN, pas de compteur jour) ;- TVA portee par le produit (
product.vat_rate), independante du mode de service (la distinction sur place / a emporter est surtout fiscale mais la TVA reste celle du produit) ; TVA d'une ligne menu =vat_ratedu burger du menu ; - flux en deux etapes (creation
pending_paymentpuis paiement ->paid+ decrement), divergence assumee du flux mono-transaction de la spec, alignee sur un parcours borne reel (ecran paiement).
- Modele de menu borne : B1 burger impose, B2 Normal/Maxi, B3 salades-en-menus, B4 numero de chevalet quand "sur place".
- Auto-merge : bascule definitive sur l'auto-merge NATIF Forgejo
(
merge_when_checks_succeed) ; le job CIauto-merge(par label) est retire (#58).
Ce que la session a fait remonter (dette / pistes)
- PR #53 (ecran Roles humanise) restee ouverte et en conflit avec
dev. CI verte sur sa tete, maismergeable: false(5 commits de retard, 2 d'avance) : les vues Roles etadmin.cssont bouge avec le design system (#49) et les relabels (#54). A rebaser surdevet resoudre avant merge. Dette principale a resorber. - CORS PHP manquant. Le vhost admin delegue les headers CORS a "un middleware PHP" qui
n'existe pas. Sans bloquer le chunk 1b (endpoints + tests cote serveur), cela bloquera
la borne des qu'elle appellera
/apicross-origin. Prerequis de la fondation borne. pay()/ decrement de stock inerte tant que les recettes (product_ingredient) ne sont pas seedees : la transitionpaids'applique, mais aucunstock_movementn'est produit faute de composition. La logique s'active des le seed des recettes.- Logo admin : un "W" dessine a la main avait remplace le vrai logo ; corrige (#56).
Verifications
PHPStan L6 0 erreur ; PHPUnit 284 tests unit (chunk 1b : +7 tests pay, +6 tests
controleur) ; php -l propre ; CI Forgejo verte par PR (merge natif squash sur les checks
requis : secret-scan, php-lint, static-tests).
Reste a faire (file d'attente)
- Rebaser + merger PR #53 (ecran Roles humanise) — conflit avec
dev. - Middleware CORS PHP sur
/api(prerequis borne cross-origin). - Seed des recettes (
product_ingredient) -> active le decrement depay(). - Fondation borne : read API (
GET /api/categories|products|menus) pour consommer le vrai modele -> B1 (burger impose) + B2 (Normal/Maxi). - B3 salades-en-menus (Cesar Classic / Italienne Mozza en menus) ; B4 etape chevalet a la borne.
- Optionnel : prix en euros vs centimes ; flux d'activite du dashboard (audit).
Reprise
dev porte tout le livre de la session sauf #53 (ouverte) et #58 (en cours de merge).
Domaine commande : src/app/Order/ (OrderRepository create + pay), routes anonymes
/api/orders dans src/public/admin/index.php.