import { NextRequest, NextResponse } from "next/server"; import { getDatabase } from "@/lib/db/mongodb"; import { ObjectId } from "mongodb"; const ALLOWED_COLLECTIONS = [ "accessroles", "aclentries", "actions", "agentcategories", "agents", "assistants", "balances", "banners", "conversations", "conversationtags", "files", "groups", "keys", "memoryentries", "messages", "pluginauths", "presets", "projects", "promptgroups", "prompts", "roles", "sessions", "sharedlinks", "tokens", "toolcalls", "transactions", "users", ]; export async function GET( request: NextRequest, { params }: { params: Promise<{ collection: string }> } ) { const { collection } = await params; try { if (!ALLOWED_COLLECTIONS.includes(collection)) { return NextResponse.json( { error: "Collection non autorisée" }, { status: 400 } ); } const { searchParams } = new URL(request.url); const page = parseInt(searchParams.get("page") || "1"); const limit = parseInt(searchParams.get("limit") || "20"); const filter = JSON.parse(searchParams.get("filter") || "{}"); // Gestion spéciale pour la collection users avec recherche par email ou id if (collection === "users") { const email = searchParams.get("email"); const id = searchParams.get("id"); const search = searchParams.get("search"); // ✅ AJOUTER cette ligne if (email) { filter.email = email.toLowerCase(); } else if (id) { // Vérifier si l'ID est un ObjectId valide if (ObjectId.isValid(id)) { filter._id = new ObjectId(id); } else { // Si l'ID n'est pas valide, retourner une erreur return NextResponse.json( { error: "ID utilisateur invalide" }, { status: 400 } ); } } else if (search) { // ✅ AJOUTER ce bloc // Recherche partielle sur nom et email filter.$or = [ { name: { $regex: search, $options: "i" } }, { email: { $regex: search, $options: "i" } }, ]; } } const db = await getDatabase(); const skip = (page - 1) * limit; const [data, total] = await Promise.all([ db .collection(collection) .find(filter) .skip(skip) .limit(limit) .sort({ createdAt: -1 }) .toArray(), db.collection(collection).countDocuments(filter), ]); return NextResponse.json({ data, total, page, limit, totalPages: Math.ceil(total / limit), }); } catch (error) { console.error(`Erreur lors de la récupération de ${collection}:`, error); return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); } }