feat: l'API expose l'historique des mouvements d'un ingrédient ; collection Bruno et Postman complétée #191

Merged
Corentin merged 2 commits from feat/api-ingredient-movements into dev 2026-09-28 13:11:17 +02:00
Owner

Pourquoi

La revue des cartes de routes (par action) a montre deux actions presentes dans le back-office mais absentes de l'API : l'historique des mouvements de stock et la recherche des donnees nutritionnelles. Decision de l'auteur : ajouter la lecture de l'historique, laisser la recherche nutritionnelle au back-office et l'ecrire. La collection Bruno n'avait pas non plus de requete pour 3 routes de l'API.

Ce qui change

  • GET /admin/api/ingredients/{id}/movements (stock.read, route 158). Meme regle que la page du back-office (RG-4) : l'auteur d'un mouvement n'est renvoye qu'aux detenteurs de stock.manage ; sinon le champ actor est absent, et actor_visible vaut false. La fonction de permission may du controleur du back-office est partagee (passee en protected), pas recopiee.
  • Contrat de l'API : la nouvelle route, et la raison pour laquelle la recherche nutritionnelle reste au back-office (appel a Open Food Facts qui ecrit directement le resultat : l'exposer permettrait de la declencher en boucle vers un tiers).
  • Collection Postman et Bruno (generee par scripts/gen_postman.py / gen_bruno.py) : historique des mouvements, modele d'import, apercu d'import sans ecriture (dry_run=1), sante detaillee. Le dossier « Statistiques » devient « Statistiques et sante ».
  • Table de securite, tests de la liste des routes (158) et matrice de l'API (54 routes) a jour ; capture des reponses refaite.

Verification

  • 4 tests ecrits avant le code (historique avec auteur, sans auteur pour un role sans stock.manage, 404, 403), rouges puis verts. PHP : 2386 tests, 7886 assertions, 0 echec ; PHPStan propre. JS : 446 sur 446.
  • Capture rejouee sur pile jetable, collection regeneree comprise : 158 succes sur 158, 670 refus sur 689 ; la requete d'apercu d'import de la collection repond 200 ; 0 secret.
  • Navigateur : trajet, console, pages d'erreur et balayage, 25 scenarios sur 25 ; balayage 4807 verifications, 0 echec.
  • gitleaks sur un clone : aucune fuite.
## Pourquoi La revue des cartes de routes (par action) a montre deux actions presentes dans le back-office mais absentes de l'API : l'historique des mouvements de stock et la recherche des donnees nutritionnelles. Decision de l'auteur : ajouter la lecture de l'historique, laisser la recherche nutritionnelle au back-office et l'ecrire. La collection Bruno n'avait pas non plus de requete pour 3 routes de l'API. ## Ce qui change - **`GET /admin/api/ingredients/{id}/movements`** (`stock.read`, route 158). Meme regle que la page du back-office (RG-4) : l'auteur d'un mouvement n'est renvoye qu'aux detenteurs de `stock.manage` ; sinon le champ `actor` est absent, et `actor_visible` vaut false. La fonction de permission `may` du controleur du back-office est partagee (passee en `protected`), pas recopiee. - **Contrat de l'API** : la nouvelle route, et la raison pour laquelle la recherche nutritionnelle reste au back-office (appel a Open Food Facts qui ecrit directement le resultat : l'exposer permettrait de la declencher en boucle vers un tiers). - **Collection Postman et Bruno** (generee par `scripts/gen_postman.py` / `gen_bruno.py`) : historique des mouvements, modele d'import, apercu d'import sans ecriture (`dry_run=1`), sante detaillee. Le dossier « Statistiques » devient « Statistiques et sante ». - Table de securite, tests de la liste des routes (158) et matrice de l'API (54 routes) a jour ; capture des reponses refaite. ## Verification - 4 tests ecrits avant le code (historique avec auteur, sans auteur pour un role sans `stock.manage`, 404, 403), rouges puis verts. PHP : 2386 tests, 7886 assertions, 0 echec ; PHPStan propre. JS : 446 sur 446. - Capture rejouee sur pile jetable, collection regeneree comprise : 158 succes sur 158, 670 refus sur 689 ; la requete d'apercu d'import de la collection repond 200 ; 0 secret. - Navigateur : trajet, console, pages d'erreur et balayage, 25 scenarios sur 25 ; balayage 4807 verifications, 0 echec. - gitleaks sur un clone : aucune fuite.
docs: collection Postman et Bruno complétée (mouvements, modèle et aperçu d'import, santé), contrat et plan d'oral à 158 routes
All checks were successful
CI / secret-scan (pull_request) Successful in 23s
CI / php-lint (pull_request) Successful in 29s
CI / static-tests (pull_request) Successful in 2m53s
CI / js-tests (pull_request) Successful in 49s
CI / shell-tests (pull_request) Successful in 7s
CI / secret-scan (push) Successful in 24s
CI / php-lint (push) Successful in 36s
CI / static-tests (push) Successful in 3m6s
CI / js-tests (push) Successful in 45s
CI / shell-tests (push) Successful in 7s
97451b7152
Corentin deleted branch feat/api-ingredient-movements 2026-09-28 13:11:17 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AcadeNice/corentin_wakdo!191
No description provided.