From bca898a447805ab097cba95291bbfc896606fb18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Fri, 17 Oct 2025 23:45:43 +0200 Subject: [PATCH] feat: add total summary section to dashboard and ensure upload directory creation --- app/admin/page.tsx | 7 +++++-- app/api/upload/route.ts | 3 ++- app/dashboard/page.tsx | 34 +++++++++++++++++----------------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/app/admin/page.tsx b/app/admin/page.tsx index 59689f2..9b818a6 100644 --- a/app/admin/page.tsx +++ b/app/admin/page.tsx @@ -611,7 +611,9 @@ export default function AdminPage() { checked={forceDelete} onChange={(e) => setForceDelete(e.target.checked)} /> - + @@ -630,7 +632,8 @@ export default function AdminPage() { Confirmation de suppression forcée - Cette action supprimera l'utilisateur sans tenir compte de ses heures. Êtes-vous sûr ? + Cette action supprimera l'utilisateur sans tenir compte de ses + heures. Êtes-vous sûr ? diff --git a/app/api/upload/route.ts b/app/api/upload/route.ts index 23f660a..3b5adbc 100644 --- a/app/api/upload/route.ts +++ b/app/api/upload/route.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from 'next/server'; -import { writeFile } from 'fs/promises'; +import { writeFile, mkdir } from 'fs/promises'; import path from 'path'; export async function POST(request: NextRequest) { @@ -29,6 +29,7 @@ export async function POST(request: NextRequest) { const filename = `${Date.now()}-${file.name}`; const filepath = path.join(process.cwd(), 'public', 'uploads', filename); + await mkdir(path.dirname(filepath), { recursive: true }); await writeFile(filepath, buffer); return NextResponse.json({ path: `/uploads/${filename}` }); diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index ddd549c..a8dcc93 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -150,6 +150,23 @@ export default function DashboardPage() { return (

Tableau de bord

+
+

Totaux

+
+
+

En attente

+

{formatHours(totalPending)}

+
+
+

Validées

+

{formatHours(totalValidated)}

+
+
+

Rejetées

+

{formatHours(totalRejected)}

+
+
+
{isMember && ( @@ -292,23 +309,6 @@ export default function DashboardPage() { )} -
-

Totaux

-
-
-

En attente

-

{formatHours(totalPending)}

-
-
-

Validées

-

{formatHours(totalValidated)}

-
-
-

Rejetées

-

{formatHours(totalRejected)}

-
-
-
); }