spb/autoscholar
Public
1import { listPapersAdmin, publishRun } from "@autoscholar/publisher";2import { z } from "zod";3import { handler, json, parseBody } from "@/lib/server/api";4import { db, storage } from "@/lib/server/db";5import { requireAdmin } from "@/lib/server/session";67export const runtime = "nodejs";89export const GET = handler(async (req) => {10 await requireAdmin(req);11 return json({ papers: await listPapersAdmin(db()) });12});1314/** Idempotent manual release (for awaiting_approval / ready_to_publish runs). */15export const POST = handler(async (req) => {16 const sess = await requireAdmin(req, { mutation: true });17 const body = await parseBody(18 req,19 z.object({20 runId: z.string().uuid(),21 correctsPaperId: z.string().uuid().optional(),22 changelog: z.string().max(2000).optional(),23 overrideRationale: z.string().max(2000).optional(),24 }),25 );26 const res = await publishRun(db(), storage(), body.runId, {27 actor: { type: "admin", id: sess.userId, ip: sess.ip },28 correctsPaperId: body.correctsPaperId,29 changelog: body.changelog,30 override: body.overrideRationale ? { rationale: body.overrideRationale } : undefined,31 });32 return json(res, { status: res.alreadyPublished ? 200 : 201 });33});34