Files
Dashboard/app/api/collections/[collection]/route.ts
2025-10-20 17:17:03 +02:00

101 lines
2.4 KiB
TypeScript

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");
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 }
);
}
}
}
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 });
}
}