import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { Role } from "@/prisma/generated/prisma/client"; import { writeFile, mkdir } from "fs/promises"; import { join } from "path"; import { existsSync } from "fs"; export async function POST(request: Request) { try { const session = await auth(); if (!session?.user || session.user.role !== Role.ADMIN) { return NextResponse.json({ error: "Accès refusé" }, { status: 403 }); } const formData = await request.formData(); const file = formData.get("file") as File; if (!file) { return NextResponse.json({ error: "Aucun fichier fourni" }, { status: 400 }); } // Vérifier le type de fichier if (!file.type.startsWith("image/")) { return NextResponse.json( { error: "Le fichier doit être une image" }, { status: 400 } ); } // Créer le dossier uploads s'il n'existe pas const uploadsDir = join(process.cwd(), "public", "uploads"); if (!existsSync(uploadsDir)) { await mkdir(uploadsDir, { recursive: true }); } // Générer un nom de fichier unique const timestamp = Date.now(); const filename = `${timestamp}-${file.name}`; const filepath = join(uploadsDir, filename); // Convertir le fichier en buffer et l'écrire const bytes = await file.arrayBuffer(); const buffer = Buffer.from(bytes); await writeFile(filepath, buffer); // Retourner l'URL de l'image const imageUrl = `/uploads/${filename}`; return NextResponse.json({ url: imageUrl }); } catch (error) { console.error("Error uploading image:", error); return NextResponse.json( { error: "Erreur lors de l'upload de l'image" }, { status: 500 } ); } }