user management

This commit is contained in:
nBiqoz
2025-10-08 10:14:38 +02:00
parent 80f075d04d
commit 6e4dda0ecd
15 changed files with 1513 additions and 93 deletions

View File

@@ -0,0 +1,160 @@
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 }
);
}
}