Commit graph

58 commits

Author SHA1 Message Date
Imugiii
34e557802c refactor(core): move app code to src/app/ (App\ -> src/app, separate from public docroots)
Some checks failed
CI / secret-scan (push) Successful in 7s
CI / php-lint (push) Successful in 16s
CI / static-tests (push) Failing after 26s
CI / auto-merge (push) Has been skipped
2026-06-15 14:31:05 +00:00
Imugiii
56d0b941e8 ci: install php-xml/php-mbstring for phpunit/phpstan (bookworm php-cli lacks dom/mbstring/xml)
All checks were successful
CI / php-lint (push) Successful in 23s
CI / static-tests (push) Successful in 41s
CI / secret-scan (pull_request) Successful in 13s
CI / secret-scan (push) Successful in 9s
CI / php-lint (pull_request) Successful in 27s
CI / static-tests (pull_request) Successful in 37s
CI / auto-merge (push) Has been skipped
CI / auto-merge (pull_request) Has been skipped
2026-06-15 14:18:10 +00:00
Imugiii
e265b0cb92 Merge remote-tracking branch 'forgejo/dev' into feat/p2-core-php
Some checks failed
CI / static-tests (pull_request) Failing after 35s
CI / secret-scan (pull_request) Successful in 11s
CI / php-lint (pull_request) Successful in 26s
CI / secret-scan (push) Successful in 13s
CI / php-lint (push) Successful in 26s
CI / static-tests (push) Failing after 31s
CI / auto-merge (pull_request) Has been skipped
CI / auto-merge (push) Has been skipped
2026-06-15 14:13:49 +00:00
Imugiii
8c93b26ec0 feat(core): from-scratch PHP MVC skeleton (autoloader/config/PDO/router/front controller) + PHPUnit/PHPStan + composer-less CI 2026-06-15 14:13:49 +00:00
dca5860869 Merge pull request 'feat(db): seed data (RBAC + allergens + catalogue)' (#8) from feat/p2-seed-data into dev
All checks were successful
CI / secret-scan (push) Successful in 8s
CI / php-lint (push) Successful in 18s
CI / static-tests (push) Successful in 5s
CI / auto-merge (push) Has been skipped
Reviewed-on: #8
2026-06-15 15:57:14 +02:00
Imugiii
04404dc8c5 docs: clarify manager has read-only user access (user.read), not zero access
All checks were successful
CI / secret-scan (pull_request) Successful in 7s
CI / php-lint (pull_request) Successful in 18s
CI / static-tests (pull_request) Successful in 4s
CI / auto-merge (push) Has been skipped
CI / auto-merge (pull_request) Has been skipped
CI / secret-scan (push) Successful in 10s
CI / php-lint (push) Successful in 18s
CI / static-tests (push) Successful in 5s
2026-06-15 13:47:58 +00:00
Imugiii
fcf52a0895 feat(db): seed data - RBAC matrix + INCO allergens + admin user + catalogue (9 cat / 53 products / 13 menus + composition)
All checks were successful
CI / secret-scan (push) Successful in 11s
CI / static-tests (push) Successful in 9s
CI / secret-scan (pull_request) Successful in 10s
CI / php-lint (push) Successful in 26s
CI / php-lint (pull_request) Successful in 25s
CI / static-tests (pull_request) Successful in 7s
CI / auto-merge (push) Has been skipped
CI / auto-merge (pull_request) Has been skipped
2026-06-15 13:45:14 +00:00
41f9c96d33 feat(db): initial schema DDL (21 tables) + migration runner (#6)
All checks were successful
CI / secret-scan (push) Successful in 9s
CI / php-lint (push) Successful in 16s
CI / static-tests (push) Successful in 4s
CI / auto-merge (push) Has been skipped
2026-06-15 15:36:05 +02:00
5581d2adea ci: opt-in auto-merge job (label-gated, API merge on green) (#7)
All checks were successful
CI / secret-scan (push) Successful in 8s
CI / php-lint (push) Successful in 21s
CI / static-tests (push) Successful in 4s
CI / auto-merge (push) Has been skipped
2026-06-15 15:31:49 +02:00
2a67b6fc34 docs(merise): traduction de la prose en francais (identifiants inchanges) (#5)
All checks were successful
CI / secret-scan (push) Successful in 9s
CI / php-lint (push) Successful in 17s
CI / static-tests (push) Successful in 5s
2026-06-15 15:23:06 +02:00
79d8ad9985 docs(merise): MLD relational schema diagrams (4 sub-domains) (#4)
All checks were successful
CI / secret-scan (push) Successful in 12s
CI / php-lint (push) Successful in 21s
CI / static-tests (push) Successful in 5s
2026-06-15 12:39:59 +02:00
32ff6a63ba P1 conception: security-by-design layer (Merise 21 entities, Forgejo CI/CD, hardening) (#3)
All checks were successful
CI / secret-scan (push) Successful in 8s
CI / php-lint (push) Successful in 16s
CI / static-tests (push) Successful in 4s
2026-06-15 12:16:11 +02:00
822fdc1bc4 ci: add Forgejo Actions pipeline + gitleaks secret-scan (#2)
All checks were successful
CI / secret-scan (push) Successful in 7s
CI / php-lint (push) Successful in 15s
CI / static-tests (push) Successful in 6s
2026-06-15 12:01:31 +02:00
Imugiii
971ce0c7d0 chore: add Forgejo PR template (BYAN conventions) 2026-06-04 15:31:38 +00:00
Imugiii
a3eae01906
Merge pull request #6 from AcadeNice/feat/p3-admin-shell
feat(admin): admin back-office visual shell (P3 scaffold)
2026-06-04 17:28:31 +02:00
Imugiii
803b840536
Merge pull request #4 from AcadeNice/feat/p5-front-landing
feat(front): P5 kiosk complete flow with vanilla JS and JSON fallback
2026-06-04 17:28:13 +02:00
Imugiii
a9938b6e5c
Merge pull request #5 from AcadeNice/feat/p1-conception
docs(merise): MCD diagrams in drawio XML (4 files)
2026-06-04 17:27:52 +02:00
Imugiii
392ba9a040 docs(merise): rewrite MLT to prod-like v0.2 (logical treatment rules)
service_day 10h cutoff, VAT snapshot by line, drive cross-constraint, atomic stock
decrement/re-credit, optimistic concurrency on status, dashboard filter by role_visible_source,
Maxi format multiplier (quantity_normal/quantity_maxi).
2026-06-04 15:17:33 +00:00
Imugiii
6057ef990f docs(merise): rewrite MCT to prod-like v0.2 (4-state machine)
Drop MARK_IN_PREPARATION / MARK_READY; DELIVER_ORDER as single counter/drive gesture.
Add stock operations (sale decrement, restock, inventory_correction) and RBAC operations.
Actors: 5 seed roles + customer.
2026-06-04 15:17:33 +00:00
Imugiii
36332b4284 docs(merise): rewrite MLD to prod-like v0.2 (19 tables)
Polymorphic order_item (exclusivity CHECK), composite-PK join tables, service_day as
query-time CASE (10h cutoff, generated column dropped), line-by-line VAT, ON DELETE rules,
recommended indexes.
2026-06-04 15:17:33 +00:00
Imugiii
6c1cede3f0 docs(merise): rewrite MCD to prod-like v0.2 (19 entities across 4 subdomains)
Catalogue / Ingredients and Stock / Order / RBAC subdomains, Mermaid erDiagram inline,
Merise (min,max) cardinality tables, cross-validation 19/19.
2026-06-04 15:17:33 +00:00
Imugiii
6ceebf7fb1 docs(merise): rewrite data dictionary to prod-like v0.2 (19 entities, English)
Drop commande_event and menu_produit. Add ingredient configurator (ingredient,
product_ingredient, allergen, ingredient_allergen), numeric stock (stock_movement),
customizable menus (menu_slot, menu_slot_option, order_item_selection, order_item_modifier),
RBAC role attributes (default_route, order_source) and role_visible_source. VAT carried by
product (vat_rate), 4-state order machine, English snake_case naming. Decisions D1-D8 + stock.
2026-06-04 15:17:33 +00:00
Imugiii
de355da54c docs: journal entry for 2026-06-04 prod-like conception decisions
Records the alignment review of all project docs and the point-by-point
decision session: drop commande_event, English naming convention, VAT
carried by product (after BOFiP fact-check), real menu customization,
full ingredient configurator, allergen modal. Lists open points D4-D8.
2026-06-04 10:19:25 +00:00
Imugiii
b8cb3ef68d docs(merise): commit P1 conception v0.1 (dictionary, MCD, MCT, MLT, MLD) + UML
Baseline of the P1 conception work produced over sessions 5-7 (was
uncommitted in the working tree). 11-entity model, French naming.
Superseded next by the prod-like revision (English, ~16 entities) per
the 2026-06-04 decision session - this commit preserves the baseline
in history before that rewrite.
2026-06-04 10:19:25 +00:00
Imugiii
17b792acfa feat(admin): vanilla JS for dropdowns, sortable tables, inline search 2026-05-09 09:27:51 +00:00
Imugiii
199d926903 feat(admin): orders, kitchen view, users pages with realistic placeholders 2026-05-09 09:27:48 +00:00
Imugiii
447cc598f6 feat(admin): catalogue page with tabs categories/products/menus 2026-05-09 09:27:45 +00:00
Imugiii
b9a5414c37 feat(admin): dashboard with KPI cards and recent orders table 2026-05-09 09:27:42 +00:00
Imugiii
0b028e534b feat(admin): admin design system CSS (palette, typography, components) 2026-05-09 09:27:40 +00:00
Imugiii
6f07238569 feat(admin): scaffold login screen and admin layout shell (sidebar, topbar) 2026-05-09 09:27:38 +00:00
Imugiii
c9fafd1c78 feat(front): render menu composition breakdown in cart lines with supplement total 2026-05-09 09:18:56 +00:00
Imugiii
e64adb60d3 feat(front): add menu composer multi-step logic and burger pre-selection 2026-05-09 09:18:49 +00:00
Imugiii
ad0b59a668 feat(front): extend cart state for menu composition with size supplements 2026-05-09 09:18:47 +00:00
Imugiii
6db68da0f9 feat(front): add menu composer modal HTML structure and CSS 2026-05-09 09:18:42 +00:00
Imugiii
6a7e772646 feat(front): extend CSS design system for P5 new screens
Adds components (sections 7-13 in style.css):
- Shared: .btn, .mode-badge, .cart-badge, .site-header__cart
- products page: .products-grid, .product-card (3-col grid)
- product detail: .product-detail, skeleton animation, composition block
- cart: .cart-line, .qty-btn, .cart-summary
- payment: .payment-choice with inline SVG icons
- confirmation: .confirmation-banner with check animation
All new components reuse existing design tokens; no new palette entries.
2026-05-09 07:59:50 +00:00
Imugiii
0d83512a4f feat(front): payment selection and order confirmation pages
payment.html     - card / cash choice with inline SVG icons; both simulate payment (MVP)
confirmation.html - order number WK-<base36 timestamp>, cart cleared on load,
                    new-order button resets flow to index.html
2026-05-09 07:59:45 +00:00
Imugiii
c517b16569 feat(front): cart page with quantity controls and TVA breakdown
Displays line items with - / + controls and delete button.
TVA 10% (restauration FR 2024, simplified).
TODO in P3: verify rate with accountant (sur-place vs a-emporter + product type).
Abandon button clears cart and returns to categories.
2026-05-09 07:59:40 +00:00
Imugiii
cd6e05c353 feat(front): products list and product detail pages
products.html - dynamic grid from ?category=<id>, JS fetch from data/produits.json
product.html  - detail view; menus show fixed composition note (MVP: no selection)
Both pages: cart badge, mode badge, keyboard/RGAA accessible cards
2026-05-09 07:59:35 +00:00
Imugiii
43b6e7a309 feat(front): vanilla JS state management, data loader, and nav helpers
state.js  - cart (localStorage) + mode + price formatting in centimes
data.js   - fetch wrapper over static JSON with in-memory cache; P4 swap points marked
nav.js    - mode badge injection and cart count badge across pages
2026-05-09 07:59:31 +00:00
Imugiii
6f5daca679 feat(front): copy school JSON sources to public/data for static fetch fallback
Normalizes produits.json:
- Prix converted from float EUR to integer centimes
- Image paths rewritten to match actual filesystem (lowercase, dashes)
- Added type field ('produit'|'menu') on each entry
- Added slug field to categories.json

In P4, swap fetch URLs in assets/js/data.js (marked with TODO comments).
2026-05-09 07:59:26 +00:00
Imugiii
71c863d2b2 feat(front): borne welcome screen and category list scaffold using school assets
- Welcome screen (index.html): background photo, white card, Sur Place / A Emporter
  choice buttons with verified school illustrations; pure HTML <a> navigation, no JS
- Category grid (categories.html): 9 categories from categories.json rendered as 3-col
  card grid with verified category images; stub links to products.html?category=<id>
- Design system CSS (assets/css/style.css): CSS custom properties for brand yellow
  #FFC72C, spacing scale, border-radius, shadows extracted from maquette PDF;
  BEM-style component classes; WCAG AA focus-visible rings; kiosk portrait 1080px primary
2026-05-09 07:12:55 +00:00
Imugiii
64f5a279da docs(merise): add drawio XML sources for MCD diagrams
Switch from Mermaid to drawio for MCD diagrams to gain manual layout
control on the global view (10 entites + 10 associations, planarite
intrinseque non resolue par Mermaid auto-layout).

- mcd-global.drawio    : 10 entites + 8 associations (vue compacte sans attributs)
- mcd-catalogue.drawio : Categorie / Produit / Menu / MenuProduit avec attributs
- mcd-commande.drawio  : Commande / LigneCommande + polymorphisme vers Produit/Menu
- mcd-rbac.drawio      : User / Role / Permission / RolePermission

Notation Merise (min,max) sur chaque cote d'association. Layout de
depart a affiner manuellement dans drawio web (Edit Diagram -> XML).
SVG a regenerer en exportant depuis drawio web.
2026-05-09 07:03:27 +00:00
Imugiii
68db2eef0d
Merge pull request #3 from AcadeNice/feat/p1-stubs-and-dictionary
P1: stubs unblock-403 + data dictionary v0.1
2026-04-30 16:27:57 +02:00
Imugiii
d1a98764d0 docs(merise): data dictionary v0.1 - 10 entities + Mermaid ER diagram + 7 modeling notes
Bottom-up derivation from school JSON sources + PROJECT_CONTEXT business rules.
Covers : Categorie, Produit, Menu, MenuProduit, Commande, LigneCommande,
User, Role, Permission, RolePermission. Decisions documented :
prices in INT cents, VAT in per-mille, polymorphic FK with snapshots
on ligne_commande, dynamic roles vs static permissions for RBAC.
2026-04-30 14:24:14 +00:00
Imugiii
b8f7d35064 feat(stubs): unblock 403 with kiosk and admin index pages, plus FastCGI fixes
Three changes bundled because the stubs surfaced two pre-existing infra bugs
that had never been hit (the smoke test only exercised PHP via 'docker exec',
not via the full Apache->PHP-FPM FastCGI path).

- src/public/borne/index.html : minimal HTML stub for the kiosk vhost
  (200 OK with the imported logo)
- src/public/admin/index.php : minimal PHP stub that proves the full
  FastCGI chain works end-to-end (renders PHP_VERSION + current timestamp)
- docker/apache/vhost.conf : add 'DirectoryIndex index.php index.html' on
  the admin vhost. Without it, hitting / returned 403 because the default
  Apache DirectoryIndex is index.html only, and the existing RewriteRule
  did not apply to the directory request (\!-d cond was false).
- docker/php-fpm/www.conf : comment out 'listen.allowed_clients = any'.
  PHP-FPM 8.3 rejects 'any' with 'Wrong IP address' and ends up dropping
  every connection from Apache. With the directive absent, all connections
  are accepted, which is acceptable in our isolated Docker network.
2026-04-30 13:07:12 +00:00
Imugiii
84d2559ba9
Merge pull request #2 from AcadeNice/feat/p1-assets-import
chore(assets): import school source data and normalize visual assets
2026-04-30 14:58:32 +02:00
Imugiii
24e733bcbc chore(assets): import school source data and normalize visual assets
- docs/merise/_sources/ : raw JSON sources (categories + produits)
  preserved unchanged for jury traceability, plus provenance note
  documenting 7 typos in image refs and gaps to address at the MCD
  phase (no FK, float prices, missing menu composition, etc.)
- docs/design/ : Figma maquette PDF (renamed without accent) plus
  README pointing to the live Figma URL
- src/public/borne/assets/images/ : 71 visual assets (53 produits +
  9 categories + 9 UI) normalized to kebab-case lowercase to avoid
  the case-sensitive Linux pitfall in Docker production

The 'wacdo' naming from the school brief is preserved only inside
docs/merise/_sources/ for traceability. The rest of the project keeps
the canonical 'Wakdo' naming.

TODO P1: rename cheesecake-choconuts-m&m-s.png (the & breaks URLs
without percent-encoding); will be fixed during seed normalization.
2026-04-30 12:43:14 +00:00
Imugiii
00a3f82a19
Merge pull request #1 from AcadeNice/feat/infra-docker
feat(infra): complete Docker stack with smoke-test validation
2026-04-30 13:55:12 +02:00
Imugiii
b09c461e94 docs: journal entry for session 4 smoke test infra
Captures the full bottom-end-to-bottom-end validation of the Docker
stack on the deployment host: env file merge with the BYAN tooling,
FQDN switch from acadenice.fr to stark.a3n.fr (using the existing
wildcard DNS), and three corrective fixes that surfaced during
'make init' (explicit IPAM subnet for the saturated host, init: true
on the cron service for dcron PID 1, static healthz file outside the
src bind-mount).

Documents 4 reasoned decisions with alternatives, 5 anticipated jury
questions, 5 conscious points of improvement, and maps 6 RNCP 37805
criteria (1.e.4, 5.b, 7.a.1, 7.a.2, 7.b.3, 7.c.4).
2026-04-30 11:52:45 +00:00
Imugiii
d9890cfb5d chore(docker): smoke test fixes for stack startup and healthz
Three issues surfaced when running 'make init' on the deployment host
and were fixed in place:

- wakdo_internal network: explicit subnet 192.168.148.0/24 (RFC 1918,
  in the free 192.168.144-159 gap). The host's Docker daemon has its
  default address pools saturated by other stacks, so auto-allocation
  failed. An explicit subnet bypasses the allocator and isolates Wakdo
  from neighbour churn.

- wakdo-cron: init: true added so Docker injects tini as PID 1. Without
  it, dcron loops on 'setpgid: Operation not permitted' because PID 1
  in a container without an init system cannot change process groups
  for its children.

- healthz vhost: served as a static file from /usr/local/apache2/htdocs/
  instead of a RewriteRule [R=200] that triggered Apache's ErrorDocument
  template (and leaked 'internal error' wording into a 200 response).
  The file lives outside /var/www/html/ which is bind-mounted at runtime
  and would otherwise mask the COPY.
2026-04-30 11:36:10 +00:00