import { NextRequest, NextResponse } from "next/server"; import { QuizAttemptValidationError, QuizNotFoundError, listQuizAttempts, submitQuizAttempt, } from "@/services/quizService"; import { quizAttemptSchema } from "@/lib/validation/attemptSchemas"; export async function POST( request: NextRequest, ctx: RouteContext<"/api/quizzes/[id]/attempt"> ) { const { id } = await ctx.params; const parsed = quizAttemptSchema.safeParse( await request.json().catch(() => null) ); if (!parsed.success) { return NextResponse.json( { error: parsed.error.issues[0]?.message ?? "Invalid attempt" }, { status: 400 } ); } try { return NextResponse.json(await submitQuizAttempt(id, parsed.data), { status: 201, }); } catch (error) { if (error instanceof QuizNotFoundError) { return NextResponse.json({ error: error.message }, { status: 404 }); } if (error instanceof QuizAttemptValidationError) { return NextResponse.json({ error: error.message }, { status: 400 }); } console.error("Failed to submit quiz attempt", error); return NextResponse.json({ error: "Failed to submit attempt" }, { status: 500 }); } } export async function GET( _request: NextRequest, ctx: RouteContext<"/api/quizzes/[id]/attempt"> ) { const { id } = await ctx.params; const attempts = await listQuizAttempts(id); return NextResponse.json(attempts); }