|
All checks were successful
CI / secret-scan (pull_request) Successful in 9s
CI / php-lint (pull_request) Successful in 21s
CI / static-tests (pull_request) Successful in 46s
CI / secret-scan (push) Successful in 9s
CI / php-lint (push) Successful in 21s
CI / static-tests (push) Successful in 52s
CI / auto-merge (pull_request) Successful in 6s
CI / auto-merge (push) Has been skipped
Quatrieme CRUD back-office, cas le plus riche du catalogue : un menu = burger de
base + N slots de composition (menu_slot) chacun proposant M options eligibles
(menu_slot_option), avec tarification Normal/Maxi.
- App\Catalogue\MenuRepository : all/find, slotsWithOptions (LEFT JOIN regroupe),
create + update dans UNE transaction (RG-T08) ; update reconstruit les slots en
delete-and-reinsert (mlt 8.5 RG-2) ; delete FK-safe (order_item.menu_id RESTRICT,
CASCADE vers slots/options) ; setActive ; categoryExists/productExists/isReferencedByOrders.
- App\Controllers\MenuController : index/create/store/edit/update/toggle/confirmDelete/
destroy ; guard menu.read/create/update/delete (RG-T03) ; CSRF sur les mutations
(RG-T01) ; validation bornee + allowlist (RG-T16/T18). PIN equipier + audit_log
UNIQUEMENT a la suppression (mlt 8.6, RG-T13/T14) ; create/update sans PIN (un
menu n'a pas de vat_rate). Throttle PIN RG-T22 (gate-before-verify, echec PIN
trace + compte dans UNE transaction).
- Vues admin/menus/{index,form,delete} + assets/js/menu-form.js : builder de slots
vanilla JS (CSP 'self' : donnees via data-*, etat serialise en champ cache
slots_json car Request::formBody ne garde que les scalaires).
- Routes /admin/menus dans le front controller ; lien nav Menus reactive (menu.read).
- Tests : MenuControllerTest (12 cas : guard, slots, CSRF, toggle, flux PIN+audit
atomique sur delete, 422 FK) ; MenuRepositoryDbTest (integration, vraie DB :
create+slots, slotsWithOptions, update delete-and-reinsert, delete+cascade) ;
FakeDatabase etendu (menu).
Suite : 201 tests verts (597 assertions avec WAKDO_DB_TESTS=1), PHPStan L6 propre.
|
||
|---|---|---|
| .. | ||
| FakeDatabase.php | ||
| SpyMailer.php | ||