Commit Graph

2 Commits

Author SHA1 Message Date
Matthieu a579ee6378 fix(shared) : durcissement infra upload (ERP-154)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 50s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m25s
- supprime le fichier orphelin sur disque si la persistance Doctrine echoue apres l ecriture (FileUploader::remove + compensation dans le processor)
- gere hash_file() renvoyant false (fichier illisible) -> FileUploadException au lieu d un TypeError opaque
- documente le choix de securite du GET (infra generique, cloisonnement delegue au consommateur)
2026-06-15 16:56:15 +02:00
Matthieu b989c33cc4 feat(shared) : infra upload générique (ERP-154)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m40s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m22s
Pose une infra d'upload de fichiers générique et réutilisable dans Shared
(spec M4 § 2.7), sans toucher au module Transport.

- Table uploaded_document (migration racine DoctrineMigrations) : fichier
  téléversé immuable (PDF / images), checksum sha256, created_at/created_by.
- Service Shared\Infrastructure\Upload\FileUploader : validation MIME
  server-side via getMimeType (jamais getClientMimeType), whitelist explicite
  (PDF + images), bornage taille, checksum sha256, écriture var/uploads/{yyyy}/{mm}/.
- Endpoint POST /api/uploaded_documents (multipart, deserialize:false) +
  UploadedDocumentProcessor -> renvoie l'IRI ; MIME hors whitelist -> 422.
- COMMENT ON COLUMN sur toutes les colonnes + bloc dans ColumnCommentsCatalog.
- Mapping Doctrine Shared + path API Platform Shared.
- Tests : FileUploader (unit) + endpoint (fonctionnel, 422 / IRI / checksum).
2026-06-15 16:08:24 +02:00