Study/src/app/api/quizzes/route.ts

43 lines
1.4 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import * as quizService from "@/services/quizService";
import { quizImportRequestSchema } from "@/lib/validation/importSchemas";
import { readLimitedJson, RequestTooLargeError } from "@/lib/limitedJson";
export async function POST(request: NextRequest) {
let body: unknown;
try {
body = await readLimitedJson(request);
} catch (error) {
if (error instanceof RequestTooLargeError) {
return NextResponse.json({ error: error.message }, { status: 413 });
}
throw error;
}
const parsed = quizImportRequestSchema.safeParse(body);
if (!parsed.success) {
return NextResponse.json(
{
error: "Invalid quiz import. SATA questions need at least two correct options.",
details: parsed.error.issues,
},
{ status: 400 }
);
}
try {
const quiz = await quizService.createQuizSetFromImport(
parsed.data.classId,
parsed.data.data,
parsed.data.name,
parsed.data.groupId ?? null
);
return NextResponse.json(quiz, { status: 201 });
} catch (error) {
if (error instanceof quizService.QuizContentValidationError) {
return NextResponse.json({ error: error.message }, { status: error.status });
}
console.error("Failed to create quiz", error);
return NextResponse.json({ error: "Failed to create quiz" }, { status: 500 });
}
}