From d8a81a56aeb1cf0c70ce415a42845691912d57ce Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Fri, 17 Apr 2026 13:33:36 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(documents-legaux):=20=C3=A9viter=20500?= =?UTF-8?q?=20upload=20sans=20utilisateur=20valide=20(#126)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ne plus associer televersePar à un UUID fictif inexistant ; laisser null tant que l’auth n’est pas branchée sur l’endpoint d’upload. Made-with: Cursor --- .../modules/documents-legaux/documents-legaux.controller.ts | 5 +++-- .../src/modules/documents-legaux/documents-legaux.service.ts | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/src/modules/documents-legaux/documents-legaux.controller.ts b/backend/src/modules/documents-legaux/documents-legaux.controller.ts index 0bef1e8..6955bad 100644 --- a/backend/src/modules/documents-legaux/documents-legaux.controller.ts +++ b/backend/src/modules/documents-legaux/documents-legaux.controller.ts @@ -101,8 +101,9 @@ export class DocumentsLegauxController { throw new BadRequestException('Aucun fichier fourni'); } - // TODO: Récupérer l'ID utilisateur depuis le guard - const userId = '00000000-0000-0000-0000-000000000000'; // Temporaire + // TODO: Récupérer l'ID utilisateur depuis le guard quand l'auth sera branchée. + // En attendant, on n'associe pas d'utilisateur plutôt que d'envoyer un UUID fictif invalide. + const userId: string | null = null; const document = await this.documentsService.uploadNouvelleVersion( uploadDto.type, diff --git a/backend/src/modules/documents-legaux/documents-legaux.service.ts b/backend/src/modules/documents-legaux/documents-legaux.service.ts index 02ce74b..3ea05e3 100644 --- a/backend/src/modules/documents-legaux/documents-legaux.service.ts +++ b/backend/src/modules/documents-legaux/documents-legaux.service.ts @@ -43,7 +43,7 @@ export class DocumentsLegauxService { async uploadNouvelleVersion( type: 'cgu' | 'privacy', file: Express.Multer.File, - userId: string, + userId?: string | null, ): Promise { // Validation du type de fichier if (file.mimetype !== 'application/pdf') { @@ -84,7 +84,7 @@ export class DocumentsLegauxService { fichier_path: filePath, fichier_hash: hash, actif: false, // Pas actif par défaut - televersePar: { id: userId } as any, + televersePar: userId ? ({ id: userId } as any) : null, televerseLe: new Date(), }); From 9acfc31e72e5d86b231e397c416646c7917a6aa9 Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Fri, 17 Apr 2026 13:42:35 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fix(infra):=20droits=20=C3=A9criture=20/app?= =?UTF-8?q?/documents/legaux=20pour=20upload=20PDF=20(#126)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le conteneur tournait en nestjs sans permission sur /app : mkdir sur /app/documents/legaux échouait → 500 sur POST documents-legaux. Création + chown dans l’image Docker + volume nommé pour persistance. Made-with: Cursor --- backend/Dockerfile | 5 +++-- docker-compose.yml | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index b1d64fd..11c5f78 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -32,8 +32,9 @@ COPY --from=builder /app/dist ./dist RUN addgroup -g 1001 -S nodejs RUN adduser -S nestjs -u 1001 -# Créer le dossier uploads et donner les permissions -RUN mkdir -p /app/uploads/photos && chown -R nestjs:nodejs /app/uploads +# Dossiers écriture runtime (nestjs non-root) : photos + documents légaux (PDF) +RUN mkdir -p /app/uploads/photos /app/documents/legaux && \ + chown -R nestjs:nodejs /app/uploads /app/documents USER nestjs diff --git a/docker-compose.yml b/docker-compose.yml index dcfa74b..4dcd87f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,6 +61,8 @@ services: UPLOAD_PHOTOS_DIR: ${UPLOAD_PHOTOS_DIR:-/app/uploads/photos} volumes: - backend_uploads:/app/uploads/photos + # PDF CGU / privacy (upload admin) — persistance entre redémarrages + - backend_documents_legaux:/app/documents/legaux depends_on: - database labels: @@ -105,6 +107,7 @@ services: volumes: postgres_data: backend_uploads: + backend_documents_legaux: networks: ptitspas_network: