import { NextRequest, NextResponse } from "next/server"; import { getDatabase } from "@/lib/db/mongodb"; import { ObjectId } from "mongodb"; interface QueryFilter { _id?: ObjectId; email?: string; } export async function DELETE(request: NextRequest) { try { const { searchParams } = new URL(request.url); const userId = searchParams.get("id"); const email = searchParams.get("email"); if (!userId && !email) { return NextResponse.json( { error: "ID utilisateur ou email requis" }, { status: 400 } ); } const db = await getDatabase(); const usersCollection = db.collection("users"); const balancesCollection = db.collection("balances"); // Construire la requête de recherche const query: QueryFilter = {}; if (userId) { // Vérifier si l'ID est un ObjectId valide if (!ObjectId.isValid(userId)) { return NextResponse.json( { error: "ID utilisateur invalide" }, { status: 400 } ); } query._id = new ObjectId(userId); } else if (email) { query.email = email.toLowerCase(); } // Vérifier si l'utilisateur existe const existingUser = await usersCollection.findOne(query); if (!existingUser) { return NextResponse.json( { error: "Utilisateur non trouvé" }, { status: 404 } ); } // Supprimer l'utilisateur const deleteUserResult = await usersCollection.deleteOne(query); // Supprimer le solde associé const deleteBalanceResult = await balancesCollection.deleteOne({ user: existingUser._id }); if (deleteUserResult.deletedCount === 0) { return NextResponse.json( { error: "Erreur lors de la suppression de l'utilisateur" }, { status: 500 } ); } return NextResponse.json({ success: true, message: "Utilisateur supprimé avec succès", deletedUser: { id: existingUser._id.toString(), name: existingUser.name, email: existingUser.email, role: existingUser.role }, balanceDeleted: deleteBalanceResult.deletedCount > 0 }); } catch (error) { console.error("Erreur lors de la suppression de l'utilisateur:", error); return NextResponse.json( { error: "Erreur interne du serveur" }, { status: 500 } ); } } export async function POST(request: NextRequest) { try { const { userId, email } = await request.json(); if (!userId && !email) { return NextResponse.json( { error: "ID utilisateur ou email requis" }, { status: 400 } ); } const db = await getDatabase(); const usersCollection = db.collection("users"); const balancesCollection = db.collection("balances"); // Construire la requête de recherche const query: QueryFilter = {}; if (userId) { // Vérifier si l'ID est un ObjectId valide if (!ObjectId.isValid(userId)) { return NextResponse.json( { error: "ID utilisateur invalide" }, { status: 400 } ); } query._id = new ObjectId(userId); } else if (email) { query.email = email.toLowerCase(); } // Vérifier si l'utilisateur existe const existingUser = await usersCollection.findOne(query); if (!existingUser) { return NextResponse.json( { error: "Utilisateur non trouvé" }, { status: 404 } ); } // Supprimer l'utilisateur const deleteUserResult = await usersCollection.deleteOne(query); // Supprimer le solde associé const deleteBalanceResult = await balancesCollection.deleteOne({ user: existingUser._id }); if (deleteUserResult.deletedCount === 0) { return NextResponse.json( { error: "Erreur lors de la suppression de l'utilisateur" }, { status: 500 } ); } return NextResponse.json({ success: true, message: "Utilisateur supprimé avec succès", deletedUser: { id: existingUser._id.toString(), name: existingUser.name, email: existingUser.email, role: existingUser.role }, balanceDeleted: deleteBalanceResult.deletedCount > 0 }); } catch (error) { console.error("Erreur lors de la suppression de l'utilisateur:", error); return NextResponse.json( { error: "Erreur interne du serveur" }, { status: 500 } ); } }