spb/note-spboucher-ai
Public
1import { z } from "zod";2import { handler, parseBody, uuid } from "@/lib/api";3import { listExperiments, createExperiment, EXPERIMENT_STATUSES } from "@/lib/research/experiments";4import { audit } from "@/lib/audit";5export const expSchema = z.object({ pageId: uuid.nullable().optional(), name: z.string().min(1).max(300), status: z.enum(EXPERIMENT_STATUSES).optional(), params: z.record(z.string(), z.unknown()).optional(), metrics: z.record(z.string(), z.unknown()).optional(), datasetRef: z.string().max(2000).nullable().optional(), repoUrl: z.string().max(2000).nullable().optional(), notes: z.string().max(20_000).nullable().optional() });6export const GET = handler(async ({ req, ws }) => Response.json(await listExperiments(ws.id, new URL(req.url).searchParams.get("pageId"))));7export const POST = handler(async ({ req, ws, user }) => { const b = await parseBody(req, expSchema); const e = await createExperiment(ws.id, b); await audit(user.id, "experiment.create", { type: "experiment", id: e.id }, { name: e.name }); return Response.json(e, { status: 201 }); });8