import { listWorkers, overviewCounts } from "@autoscholar/core"; import { papers, securityEvents } from "@autoscholar/db"; import { desc, sql } from "drizzle-orm"; import { handler, json } from "@/lib/server/api"; import { db } from "@/lib/server/db"; import { requireAdmin } from "@/lib/server/session"; export const runtime = "nodejs"; export const GET = handler(async (req) => { await requireAdmin(req); const d = db(); const counts = await overviewCounts(d); const workers = await listWorkers(d); const [pubs] = await d.select({ n: sql`count(*)::int` }).from(papers); const alerts = await d.select().from(securityEvents).orderBy(desc(securityEvents.createdAt)).limit(10); return json({ runs: counts, workers: workers.map((w) => ({ id: w.id, name: w.name, status: w.status, running: w.running, capacity: w.capacity, lastHeartbeatAt: w.lastHeartbeatAt, })), publications: pubs?.n ?? 0, alerts, }); });