Files
got-gaming/app/api/feedback/[eventId]/route.ts

109 lines
2.6 KiB
TypeScript

import { NextResponse } from "next/server";
import { auth } from "@/lib/auth";
import { prisma } from "@/lib/prisma";
export async function POST(
request: Request,
{ params }: { params: Promise<{ eventId: string }> }
) {
try {
const session = await auth();
if (!session?.user?.id) {
return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
}
const { eventId } = await params;
const body = await request.json();
const { rating, comment } = body;
// Valider la note (1-5)
if (!rating || rating < 1 || rating > 5) {
return NextResponse.json(
{ error: "La note doit être entre 1 et 5" },
{ status: 400 }
);
}
// Vérifier que l'événement existe
const event = await prisma.event.findUnique({
where: { id: eventId },
});
if (!event) {
return NextResponse.json(
{ error: "Événement introuvable" },
{ status: 404 }
);
}
// Créer ou mettre à jour le feedback (unique par utilisateur/événement)
const feedback = await prisma.eventFeedback.upsert({
where: {
userId_eventId: {
userId: session.user.id,
eventId,
},
},
update: {
rating,
comment: comment || null,
},
create: {
userId: session.user.id,
eventId,
rating,
comment: comment || null,
},
});
return NextResponse.json({ success: true, feedback });
} catch (error) {
console.error("Error saving feedback:", error);
return NextResponse.json(
{ error: "Erreur lors de l'enregistrement du feedback" },
{ status: 500 }
);
}
}
export async function GET(
request: Request,
{ params }: { params: Promise<{ eventId: string }> }
) {
try {
const session = await auth();
if (!session?.user?.id) {
return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
}
const { eventId } = await params;
// Récupérer le feedback de l'utilisateur pour cet événement
const feedback = await prisma.eventFeedback.findUnique({
where: {
userId_eventId: {
userId: session.user.id,
eventId,
},
},
include: {
event: {
select: {
id: true,
name: true,
date: true,
},
},
},
});
return NextResponse.json({ feedback });
} catch (error) {
console.error("Error fetching feedback:", error);
return NextResponse.json(
{ error: "Erreur lors de la récupération du feedback" },
{ status: 500 }
);
}
}