import { NextRequest, NextResponse } from "next/server"; import { prisma } from "@/lib/prisma"; import { requireAdmin } from "@/lib/session"; import bcrypt from "bcryptjs"; export async function PATCH(req: NextRequest) { const admin = await requireAdmin(); if (!admin) return NextResponse.json({ error: "Admin requis" }, { status: 403 }); const { id, ...data } = await req.json(); if (!id) return NextResponse.json({ error: "id requis" }, { status: 400 }); const allowed = [ "name", "email", "isMuayThai", "isYoga", "role", "phone", "avatar", "password" ]; const updateData: any = {}; for (const key of allowed) { if (data[key] !== undefined) updateData[key] = data[key]; } if (updateData.email) updateData.email = updateData.email.toLowerCase(); if (updateData.password) { if (updateData.password.length < 6) { return NextResponse.json( { error: "Le mot de passe doit contenir au moins 6 caractères" }, { status: 400 } ); } updateData.password = await bcrypt.hash(updateData.password, 10); } try { if (updateData.isMuayThai === true) { await prisma.muayThaiProfile.upsert({ where: { userId: id }, update: {}, create: { userId: id }, }); } if (updateData.isYoga === true) { await prisma.yogaProfile.upsert({ where: { userId: id }, update: {}, create: { userId: id }, }); } const user = await prisma.user.update({ where: { id }, data: updateData, }); const { password: _, ...safeUser } = user; return NextResponse.json(safeUser); } catch (error) { console.error(error); return NextResponse.json({ error: "Erreur" }, { status: 500 }); } } export async function DELETE(req: NextRequest) { const admin = await requireAdmin(); if (!admin) return NextResponse.json({ error: "Admin requis" }, { status: 403 }); const { id } = await req.json(); if (!id) return NextResponse.json({ error: "id requis" }, { status: 400 }); try { await prisma.user.delete({ where: { id } }); return NextResponse.json({ ok: true }); } catch { return NextResponse.json({ error: "Erreur" }, { status: 500 }); } }