SPB Git
1.4 KB · 17 lines typescript
1import { z } from "zod";2import { handler, parseBody, uuid } from "@/lib/api";3import { listReferences, createReference } from "@/lib/research/references";4import { audit } from "@/lib/audit";5export const refSchema = z.object({ pageId: uuid.nullable().optional(), citeKey: z.string().max(120).nullable().optional(), entryType: z.string().max(40).optional(), title: z.string().min(1).max(1000), authors: z.array(z.string().max(200)).max(100).optional(), year: z.number().int().min(1000).max(2100).nullable().optional(), journal: z.string().max(500).nullable().optional(), doi: z.string().max(200).nullable().optional(), url: z.string().max(2000).nullable().optional(), fields: z.record(z.string(), z.unknown()).optional(), verified: z.enum(["user", "doi_verified", "ai_suggested"]).optional(), attachmentId: uuid.nullable().optional() });6/** GET ?pageId=<id> (page references) | no pageId = whole library */7export const GET = handler(async ({ req, ws }) => {8  const pageId = new URL(req.url).searchParams.get("pageId");9  return Response.json(await listReferences(ws.id, { pageId: pageId || null }));10});11export const POST = handler(async ({ req, ws, user }) => {12  const b = await parseBody(req, refSchema);13  const r = await createReference(ws.id, { ...b, verified: b.verified ?? "user" });14  await audit(user.id, "reference.create", { type: "reference", id: r.id }, { citeKey: r.citeKey });15  return Response.json(r, { status: 201 });16});17
Files · main
Menu

Theme