// Utilitaires communs des routes API : gestion d'erreurs uniforme + validation zod. import { NextResponse } from "next/server"; import { ZodError, type ZodType, type ZodTypeDef } from "zod"; import { AuthError } from "./auth/session.ts"; import { get } from "./db/index.ts"; export function apiError(e: unknown): NextResponse { if (e instanceof AuthError) return NextResponse.json({ error: e.message }, { status: e.status }); if (e instanceof ZodError) return NextResponse.json({ error: "Requête invalide : " + e.issues.map((i) => i.message).join(" ; ") }, { status: 400 }); console.error("[api]", e); return NextResponse.json({ error: "Erreur interne du serveur." }, { status: 500 }); } export async function parseBody(req: Request, schema: ZodType): Promise { const json = await req.json().catch(() => { throw new ZodError([{ code: "custom", message: "corps JSON manquant", path: [] }]); }); return schema.parse(json); } export function requireEnrollment(userId: number, courseCode: string) { const row = get("SELECT 1 as ok FROM enrollments WHERE user_id = ? AND course_code = ?", userId, courseCode); if (!row) throw new AuthError(403, "Vous n'êtes pas inscrit à ce cours."); }