import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { Role } from "@/prisma/generated/prisma/client"; export async function GET() { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ error: "Non authentifié" }, { status: 401 }); } if (session.user.role !== Role.ADMIN) { return NextResponse.json({ error: "Accès refusé" }, { status: 403 }); } // Récupérer tous les feedbacks avec les détails de l'événement et de l'utilisateur const feedbacks = await prisma.eventFeedback.findMany({ include: { event: { select: { id: true, name: true, date: true, type: true, }, }, user: { select: { id: true, username: true, email: true, }, }, }, orderBy: { createdAt: "desc", }, }); // Calculer les statistiques par événement const eventStats = await prisma.eventFeedback.groupBy({ by: ["eventId"], _avg: { rating: true, }, _count: { id: true, }, }); // Récupérer les détails des événements pour les stats const eventIds = eventStats.map((stat) => stat.eventId); const events = await prisma.event.findMany({ where: { id: { in: eventIds, }, }, select: { id: true, name: true, date: true, type: true, }, }); // Combiner les stats avec les détails des événements const statsWithDetails = eventStats.map((stat) => { const event = events.find((e) => e.id === stat.eventId); return { eventId: stat.eventId, eventName: event?.name || "Événement supprimé", eventDate: event?.date || null, eventType: event?.type || null, averageRating: stat._avg.rating || 0, feedbackCount: stat._count.id, }; }); return NextResponse.json({ feedbacks, statistics: statsWithDetails, }); } catch (error) { console.error("Error fetching feedbacks:", error); return NextResponse.json( { error: "Erreur lors de la récupération des feedbacks" }, { status: 500 } ); } }