import { NextResponse } from "next/server"; import { errorResponse, requireReady } from "../_lib"; import { createModel, listModels, rejectWorkspaceForgery } from "@/server/spreadsheet-adapter/service"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; export async function GET() { try { const { ctx, deps } = await requireReady(); return NextResponse.json({ models: await listModels(deps, ctx) }); } catch (error) { return errorResponse(error); } } export async function POST(request: Request) { try { const { ctx, deps } = await requireReady(); const form = await request.formData(); await rejectWorkspaceForgery(deps, ctx, form.get("workspace_id")); const file = form.get("file"); if (!(file instanceof File)) return errorResponse(new Error("arquivo")); const requiredRaw = form.get("requiredColumns"); const model = await createModel(deps, ctx, { name: String(form.get("name") ?? ""), filename: file.name, bytes: Buffer.from(await file.arrayBuffer()), sheet: form.get("sheet") ? String(form.get("sheet")) : null, headerRow: Number(form.get("headerRow") ?? 1), requiredColumns: requiredRaw ? (JSON.parse(String(requiredRaw)) as string[]) : undefined, }); return NextResponse.json({ model }, { status: 201 }); } catch (error) { if (error instanceof Error && error.message === "arquivo") { return NextResponse.json({ error: { code: "EMPTY_FILE", message: "Selecione um arquivo." } }, { status: 400 }); } return errorResponse(error); } }