61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { getPool } from "@/services/database";
|
|
|
|
// DELETE - Supprimer complètement un utilisateur
|
|
export async function DELETE(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ userId: string }> }
|
|
) {
|
|
try {
|
|
const { userId } = await params;
|
|
|
|
if (!userId) {
|
|
return NextResponse.json(
|
|
{ error: "L'ID de l'utilisateur est requis" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const pool = getPool();
|
|
|
|
// Vérifier que l'utilisateur existe
|
|
const userCheck = await pool.query(
|
|
"SELECT uuid_id, first_name, last_name FROM users WHERE uuid_id = $1",
|
|
[userId]
|
|
);
|
|
|
|
if (userCheck.rows.length === 0) {
|
|
return NextResponse.json(
|
|
{ error: "Utilisateur non trouvé" },
|
|
{ status: 404 }
|
|
);
|
|
}
|
|
|
|
const user = userCheck.rows[0];
|
|
|
|
// Vérifier que l'utilisateur n'est pas dans une équipe
|
|
if (user.team_id) {
|
|
return NextResponse.json(
|
|
{
|
|
error:
|
|
"Impossible de supprimer un utilisateur qui appartient à une équipe. Retirez-le d'abord de son équipe.",
|
|
},
|
|
{ status: 409 }
|
|
);
|
|
}
|
|
|
|
// Supprimer l'utilisateur (les évaluations par skills seront supprimées automatiquement grâce aux contraintes CASCADE)
|
|
await pool.query("DELETE FROM users WHERE uuid_id = $1", [userId]);
|
|
|
|
return NextResponse.json({
|
|
message: `Utilisateur ${user.first_name} ${user.last_name} supprimé avec succès`,
|
|
});
|
|
} catch (error) {
|
|
console.error("Error deleting user:", error);
|
|
return NextResponse.json(
|
|
{ error: "Erreur lors de la suppression de l'utilisateur" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|