release: dev -> main v0.2.0 #93
1 changed files with 80 additions and 0 deletions
80
docs/journal/2026-06-18--front-login-ui-admin-p4-commande.md
Normal file
80
docs/journal/2026-06-18--front-login-ui-admin-p4-commande.md
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# 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 via
|
||||
`tests/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 que `K-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_rate` du burger du menu ;
|
||||
- flux en **deux etapes** (creation `pending_payment` puis 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 CI `auto-merge` (par label) est retire (#58).
|
||||
|
||||
## Ce que la session a fait remonter (dette / pistes)
|
||||
1. **PR #53 (ecran Roles humanise) restee ouverte et en conflit avec `dev`.** CI verte sur
|
||||
sa tete, mais `mergeable: false` (5 commits de retard, 2 d'avance) : les vues Roles et
|
||||
`admin.css` ont bouge avec le design system (#49) et les relabels (#54). A rebaser sur
|
||||
`dev` et resoudre avant merge. Dette principale a resorber.
|
||||
2. **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 `/api` cross-origin. Prerequis de la fondation borne.
|
||||
3. **`pay()` / decrement de stock inerte** tant que les recettes (`product_ingredient`) ne
|
||||
sont pas seedees : la transition `paid` s'applique, mais aucun `stock_movement` n'est
|
||||
produit faute de composition. La logique s'active des le seed des recettes.
|
||||
4. **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 de `pay()`.
|
||||
- **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`.
|
||||
Loading…
Add table
Reference in a new issue