corentin_wakdo/docs/adr/0006-http-409-conflit-422-validation.md
Imugiii 035129d7be
All checks were successful
CI / js-tests (pull_request) Successful in 23s
CI / secret-scan (pull_request) Successful in 10s
CI / php-lint (pull_request) Successful in 23s
CI / static-tests (pull_request) Successful in 45s
CI / auto-merge (pull_request) Successful in 4s
docs(adr): registre des decisions d'architecture (9 ADR)
docs/adr/ : une fiche courte (contexte / decision / consequences) par decision
structurante, + un index et un modele de fiche.

0001 PHP from scratch sans Composer ; 0002 back-office MVC rendu serveur ;
0003 stock en % + dispo calculee RG-T21 ; 0004 PIN d'action sensible + audit en
transaction ; 0005 throttle PIN separe du login (RG-T22) ; 0006 HTTP 409 vs 422 ;
0007 effacement RGPD par anonymisation (tombstone) ; 0008 Makefile -> docker compose
(wakdo-migrate) ; 0009 compose standalone + prod gitignore.

Deuxieme PR du jeu de documentation. Resout le renvoi docs/adr/ d'ARCHITECTURE.md.
2026-06-17 13:50:27 +00:00

25 lines
1.1 KiB
Markdown

# ADR-0006 — HTTP 409 (conflit) vs 422 (validation)
- Statut : Accepte
- Date : 2026-06-17
## Contexte
Les controleurs renvoyaient 422 a la fois pour une validation qui echoue ET pour un
conflit d'etat (unicite, suppression bloquee par FK RESTRICT). Le contrat documente
(`byan-api.md`) attendait 409 pour les conflits. Derive a corriger.
## Decision
Convention harmonisee sur tous les controleurs :
- **422** : requete bien formee mais **semantiquement invalide** (validation serveur,
RG-T18) ;
- **409** : **conflit d'etat** (violation d'unicite SQLSTATE 23000, hard-delete bloque
par FK RESTRICT) ;
- **403** : CSRF invalide ou permission manquante ; **404** : ressource introuvable.
## Consequences
- (+) Statuts semantiquement justes (RFC 9110), testables, coherents entre Category /
Product / Menu / Ingredient / User / Role.
- (+) Aligne le code sur le contrat d'API documente.
- (-) Pages rendues serveur : un 200-avec-erreurs "marcherait" visuellement, mais le
statut correct est verrouille par les tests (un oubli = test rouge).
- Remediation : PR #33 (Category/Product/Menu) ; les controleurs suivants naissent en 409.