|
All checks were successful
CI / secret-scan (push) Successful in 8s
CI / php-lint (push) Successful in 20s
CI / static-tests (push) Successful in 42s
CI / js-tests (push) Successful in 24s
CI / secret-scan (pull_request) Successful in 8s
CI / php-lint (pull_request) Successful in 18s
CI / static-tests (pull_request) Successful in 46s
CI / js-tests (pull_request) Successful in 23s
5 endpoints publics anonymes en lecture seule (docs/api/conventions.md 5.2) :
GET /api/categories, /api/products, /api/products/{id}, /api/menus, /api/menus/{id}.
- CatalogueController : projection explicite (types entiers garantis cote JSON),
enveloppe {data,total} / {data:null,error:{code,message}}, 404 NOT_FOUND.
- Repos lecture : CategoryRepository::activeForCatalogue ; Product/Menu
::availableForCatalogue + findForCatalogue. Filtres is_available=1 ET categorie
active : la borne ne voit que le commandable (liste ET detail). Menu detail
porte ses slots (slotsWithOptions, option_product_ids).
- Payload canonique snake_case ; vat_rate exclu (fiscal serveur), is_available
retire (toujours dispo), is_required du slot en booleen, sans timestamp.
- Dispo calculee RG-T21 differee au seed des recettes (filtre actuel = flag).
- Tests : 11 unit (FakeCatalogueDatabase, read-only) + 2 integration (filtres +
slots vs vraie MariaDB).
|
||
|---|---|---|
| .. | ||
| FakeCatalogueDatabase.php | ||
| FakeDatabase.php | ||
| FakeOrderDatabase.php | ||
| SpyMailer.php | ||