[ERP-45] Implémenter Provider et Processor Category #17

Merged
malio merged 3 commits from feature/ERP-45-implementer-provider-processor-category into develop 2026-05-28 09:44:44 +00:00
Owner

Mode stacked PR — cible feature/ERP-44-creer-entites-category

⚠ Cette MR a pour base la branche ERP-44 (en review). Quand ERP-44 sera mergée sur develop, repointer la cible vers develop.

Résumé

  • Provider CategoryProvider : filtre soft-delete par défaut (RG-1.08), ?includeDeleted=true (RG-1.09), tri name ASC (RG-1.10), 404 si soft-deleted hors flag (RG-1.11).
  • Processor CategoryProcessor : trim du name (RG-1.03), conversion DELETE → UPDATE (RG-1.12), mapping UniqueConstraintViolationException → HTTP 409 avec message exact (RG-1.07).
  • Câblage Provider/Processor dans #[ApiResource] de Category. Provider câblé aussi sur Patch + Delete (au-delà du scope strict du ticket) pour fermer la fuite RG-1.11 sur PATCH.
  • DoctrineCategoryRepository expose createListQueryBuilder($includeDeleted).

Décisions notables

  • Filtre soft-delete via QueryBuilder (choix a du ticket) : pas de filtre Doctrine global, lisibilité directe.
  • Pas de remove_processor injecté : la DELETE est convertie en UPDATE via le persist_processor. API Platform 4 utilise le processor déclaré sur l'opération sans fallback automatique.
  • Provider sur Patch + Delete aussi : décision prise pendant le dev pour fermer une fuite RG-1.11 sur PATCH. Coût : 2 lignes dans Category.php.

Tests

  • make php-cs-fixer-allow-risky
  • make test ✓ (248 tests, 0 régression — pas de test métier Category, c'est ERP-48)
  • Tests manuels curl ✓ — 8 cas RG-1.03 → RG-1.13 validés (détail dans le ticket Lesstime #45)

Tickets

  • Lesstime : #45 (ERP-45) → En review
  • Position M0 : 0.3
  • Spec : docs/specs/M0-categories/spec-back.md § 4.1 + § 4.3 + § 4.4 + § 4.5

Suite

  • ERP-46 (0.4 CategoryType lecture seule) — base : cette branche
## Mode stacked PR — cible `feature/ERP-44-creer-entites-category` > ⚠ Cette MR a pour base la branche ERP-44 (en review). Quand ERP-44 sera mergée sur develop, **repointer la cible vers develop**. ## Résumé - Provider `CategoryProvider` : filtre soft-delete par défaut (RG-1.08), `?includeDeleted=true` (RG-1.09), tri name ASC (RG-1.10), 404 si soft-deleted hors flag (RG-1.11). - Processor `CategoryProcessor` : trim du `name` (RG-1.03), conversion DELETE → UPDATE (RG-1.12), mapping `UniqueConstraintViolationException` → HTTP 409 avec message exact (RG-1.07). - Câblage Provider/Processor dans `#[ApiResource]` de `Category`. Provider câblé aussi sur Patch + Delete (au-delà du scope strict du ticket) pour fermer la fuite RG-1.11 sur PATCH. - `DoctrineCategoryRepository` expose `createListQueryBuilder($includeDeleted)`. ## Décisions notables - **Filtre soft-delete via QueryBuilder** (choix `a` du ticket) : pas de filtre Doctrine global, lisibilité directe. - **Pas de `remove_processor` injecté** : la DELETE est convertie en UPDATE via le `persist_processor`. API Platform 4 utilise le processor déclaré sur l'opération sans fallback automatique. - **Provider sur Patch + Delete aussi** : décision prise pendant le dev pour fermer une fuite RG-1.11 sur PATCH. Coût : 2 lignes dans `Category.php`. ## Tests - `make php-cs-fixer-allow-risky` ✓ - `make test` ✓ (248 tests, 0 régression — pas de test métier Category, c'est ERP-48) - Tests manuels curl ✓ — 8 cas RG-1.03 → RG-1.13 validés (détail dans le ticket Lesstime #45) ## Tickets - Lesstime : #45 (ERP-45) → En review - Position M0 : 0.3 - Spec : `docs/specs/M0-categories/spec-back.md` § 4.1 + § 4.3 + § 4.4 + § 4.5 ## Suite - ERP-46 (0.4 CategoryType lecture seule) — base : cette branche
malio changed target branch from feature/ERP-44-creer-entites-category to develop 2026-05-28 09:44:22 +00:00
matthieu added 3 commits 2026-05-28 09:44:32 +00:00
- remplace build:dist (nuxt generate + prerender inutile en SPA) par nuxt build
- cache node_modules sur hash du lockfile, npm ci uniquement en cache miss
- regenere les types Nuxt (postinstall) en cache hit
- cache des artefacts .nuxt / Vite avec restore-keys pour eviter le build a froid
Les logs montrent que chaque operation actions/cache attend ~4m30 avant
ETIMEDOUT sur le serveur de cache du runner Gitea (51.91.78.99:39531) :
- cache: npm de setup-node = tout le 'Setup Node 22' (271s)
- cache node_modules et cache .nuxt : timeouts additionnels
- cache Composer cote backend : meme risque

Node 22 est deja dans le tool-cache (install instantane), npm ci a froid
~30s, build ~20s : le caching n'apportait rien ici. A re-activer si le
serveur de cache du runner est repare.
feat(catalog) : implement CategoryProvider and CategoryProcessor with soft delete and 409 mapping
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m10s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m5s
0607ad8676
- CategoryProvider applique le filtre soft-delete par defaut (RG-1.08), respecte ?includeDeleted=true (RG-1.09), trie par name ASC (RG-1.10) et renvoie 404 sur Get d'une soft-deleted hors flag (RG-1.11). Cable aussi sur Patch+Delete pour fermer la fuite sur PATCH.
- CategoryProcessor : trim du name au POST/PATCH (RG-1.03), conversion DELETE en UPDATE avec deletedAt=now() via persist_processor (RG-1.12), mapping UniqueConstraintViolationException -> HTTP 409 avec le message attendu (RG-1.07).
- Cablage des Provider/Processor dans #[ApiResource] de Category.
- DoctrineCategoryRepository expose createListQueryBuilder($includeDeleted) pour le Provider.
matthieu force-pushed feature/ERP-45-implementer-provider-processor-category from ae70e90db2 to 0607ad8676 2026-05-28 09:44:32 +00:00 Compare
malio merged commit 80fabcae91 into develop 2026-05-28 09:44:44 +00:00
malio deleted branch feature/ERP-45-implementer-provider-processor-category 2026-05-28 09:44:44 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Starseed#17