import { NextRequest, NextResponse } from 'next/server'; import { getCurrentUser } from '@/lib/auth'; import { prisma } from '@/lib/prisma'; import { hashPassword, verifyPassword } from '@/lib/auth'; // GET - Récupérer le profil de l'utilisateur export async function GET() { try { const user = await getCurrentUser(); if (!user) { return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }); } const userProfile = await prisma.user.findUnique({ where: { id: user.id }, select: { id: true, email: true, name: true, photoUrl: true, role: { select: { id: true, name: true, description: true, }, }, }, }); return NextResponse.json(userProfile); } catch (error) { console.error('Erreur lors de la récupération du profil:', error); return NextResponse.json( { error: 'Erreur serveur' }, { status: 500 } ); } } // PUT - Mettre à jour le profil de l'utilisateur export async function PUT(request: NextRequest) { try { const user = await getCurrentUser(); if (!user) { return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }); } const body = await request.json(); const { name, email, photoUrl, currentPassword, newPassword } = body; // Récupérer l'utilisateur complet pour vérifier le mot de passe si nécessaire const currentUser = await prisma.user.findUnique({ where: { id: user.id }, }); if (!currentUser) { return NextResponse.json({ error: 'Utilisateur non trouvé' }, { status: 404 }); } // Vérifier si l'email est déjà utilisé par un autre utilisateur if (email && email !== currentUser.email) { const existingUser = await prisma.user.findUnique({ where: { email }, }); if (existingUser) { return NextResponse.json( { error: 'Cet email est déjà utilisé' }, { status: 400 } ); } } // Vérifier le mot de passe actuel si un nouveau mot de passe est fourni if (newPassword) { if (!currentPassword) { return NextResponse.json( { error: 'Le mot de passe actuel est requis pour changer le mot de passe' }, { status: 400 } ); } const isValidPassword = await verifyPassword(currentPassword, currentUser.password); if (!isValidPassword) { return NextResponse.json( { error: 'Mot de passe actuel incorrect' }, { status: 400 } ); } } // Préparer les données à mettre à jour const updateData: any = {}; if (name !== undefined) updateData.name = name; if (email !== undefined) updateData.email = email; if (photoUrl !== undefined) updateData.photoUrl = photoUrl; if (newPassword) { updateData.password = await hashPassword(newPassword); } // Mettre à jour l'utilisateur const updatedUser = await prisma.user.update({ where: { id: user.id }, data: updateData, select: { id: true, email: true, name: true, photoUrl: true, role: { select: { id: true, name: true, description: true, }, }, }, }); return NextResponse.json({ success: true, user: updatedUser, }); } catch (error) { console.error('Erreur lors de la mise à jour du profil:', error); return NextResponse.json( { error: 'Erreur serveur' }, { status: 500 } ); } }