From 2b01c4ba6c512a836adcef52ffe83d58ff859d53 Mon Sep 17 00:00:00 2001 From: Manus Date: Tue, 10 Feb 2026 11:46:00 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Correction=20d=C3=A9finitive=20du?= =?UTF-8?q?=20stockage=20local=20pour=20les=20signatures=20formateur=20-?= =?UTF-8?q?=20Remplacement=20de=20storagePut()=20par=20fs.writeFileSync()?= =?UTF-8?q?=20pour=20=C3=A9viter=20les=20timeouts=20li=C3=A9s=20=C3=A0=20l?= =?UTF-8?q?'API=20Manus=20non=20configur=C3=A9e=20sur=20le=20VPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/routers.ts | 14 ++++++++++++-- todo.md | 7 +++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/server/routers.ts b/server/routers.ts index 435562b..39a5bcb 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -2638,6 +2638,9 @@ export const appRouter = router({ let signatureUrl: string | undefined; let signatureS3Key: string | undefined; if (input.signatureDataUrl) { + const fs = await import("fs"); + const path = await import("path"); + const formationId = sequenceData[0].formationId; const sequenceId = sequenceData[0].id; const randomSuffix = crypto.randomBytes(8).toString("hex"); @@ -2645,8 +2648,15 @@ export const appRouter = router({ const signatureS3Key = `signatures/${formationId}-${sequenceId}/${fileName}`; const base64Data = input.signatureDataUrl.split(",")[1]; const buffer = Buffer.from(base64Data, "base64"); - const { url } = await storagePut(signatureS3Key, buffer, "image/png"); - signatureUrl = url; + + // Stockage local + const uploadsDir = path.join(process.cwd(), "uploads", "signatures"); + if (!fs.existsSync(uploadsDir)) { + fs.mkdirSync(uploadsDir, { recursive: true }); + } + const filePath = path.join(uploadsDir, fileName); + fs.writeFileSync(filePath, buffer); + signatureUrl = `/uploads/signatures/${fileName}`; } // Valider la présence formateur diff --git a/todo.md b/todo.md index 999462a..67a18b6 100644 --- a/todo.md +++ b/todo.md @@ -1597,3 +1597,10 @@ - [x] Corriger la logique pour utiliser la date sélectionnée par le formateur - [x] Déployer sur le serveur de recette et production - [ ] Tester avec une date passée ou future + +## Correction définitive stockage local signatures formateur + +- [x] Remplacer storagePut() par fs.writeFileSync() dans le code de validation formateur +- [x] Déployer sur production +- [ ] Tester la validation formateur (doit fonctionner sans fetch failed) +- [ ] Vérifier que la signature est bien enregistrée localement