import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import bcrypt from "bcryptjs"; export async function PUT(request: Request) { try { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Non authentifié" }, { status: 401 }); } const body = await request.json(); const { currentPassword, newPassword, confirmPassword } = body; // Validation if (!currentPassword || !newPassword || !confirmPassword) { return NextResponse.json( { error: "Tous les champs sont requis" }, { status: 400 } ); } if (newPassword.length < 6) { return NextResponse.json( { error: "Le nouveau mot de passe doit contenir au moins 6 caractères" }, { status: 400 } ); } if (newPassword !== confirmPassword) { return NextResponse.json( { error: "Les mots de passe ne correspondent pas" }, { status: 400 } ); } // Récupérer l'utilisateur avec le mot de passe const user = await prisma.user.findUnique({ where: { id: session.user.id }, select: { password: true }, }); if (!user) { return NextResponse.json( { error: "Utilisateur non trouvé" }, { status: 404 } ); } // Vérifier l'ancien mot de passe const isPasswordValid = await bcrypt.compare(currentPassword, user.password); if (!isPasswordValid) { return NextResponse.json( { error: "Mot de passe actuel incorrect" }, { status: 400 } ); } // Hasher le nouveau mot de passe const hashedPassword = await bcrypt.hash(newPassword, 10); // Mettre à jour le mot de passe await prisma.user.update({ where: { id: session.user.id }, data: { password: hashedPassword }, }); return NextResponse.json({ message: "Mot de passe modifié avec succès" }); } catch (error) { console.error("Error updating password:", error); return NextResponse.json( { error: "Erreur lors de la modification du mot de passe" }, { status: 500 } ); } }