import { NextRequest, NextResponse } from "next/server"; import { DeliveryKind, DeliveryStatus } from "@prisma/client"; import { toErrorResponse } from "@/lib/render-pipeline/errors"; import { requirePipelineUser, requirePipelineAdmin } from "@/lib/render-pipeline/session-auth"; import { createDeliveryPackage, createDeliverySchema, listDeliveryPackages, } from "@/lib/render-pipeline/deliveries"; // ── GET /api/deliveries (E17) · POST /api/deliveries (E16) ─────────────────── export async function GET(req: NextRequest) { try { await requirePipelineUser(); const { searchParams } = new URL(req.url); const status = searchParams.get("status"); const kind = searchParams.get("kind"); const result = await listDeliveryPackages({ projectId: searchParams.get("projectId") ?? undefined, episode: searchParams.get("episode") ?? undefined, status: status ? (status as DeliveryStatus) : undefined, kind: kind ? (kind as DeliveryKind) : undefined, }); return NextResponse.json(result); } catch (err) { const { body, status } = toErrorResponse(err); return NextResponse.json(body, { status }); } } export async function POST(req: NextRequest) { try { // Building a package writes to the delivery volume and locks versions — // producer/supervisor territory, not any signed-in user. const user = await requirePipelineAdmin(); let raw: unknown; try { raw = await req.json(); } catch { return NextResponse.json({ error: "Invalid JSON" }, { status: 400 }); } const parsed = createDeliverySchema.safeParse(raw); if (!parsed.success) { return NextResponse.json({ error: "Invalid delivery request", details: parsed.error.issues }, { status: 422 }); } const result = await createDeliveryPackage(parsed.data, user.id); return NextResponse.json(result, { status: 201 }); } catch (err) { const { body, status } = toErrorResponse(err); return NextResponse.json(body, { status }); } }