Imugiii
|
0fc96c8e67
|
feat(api): P4 chunk 2 - read API catalogue borne (categories/produits/menus)
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).
|
2026-06-18 14:07:34 +00:00 |
|