import { z } from "zod"; import { requireUser, jsonError } from "@/lib/auth/guard"; import { sql } from "@/db"; import { enqueue, stats } from "@/lib/jobs/queue"; import { audit } from "@/lib/audit"; export async function GET(req: Request) { try { await requireUser(); const p = new URL(req.url).searchParams; const status = p.get("status"); const rows = await sql`SELECT id, kind, payload, status, attempts, max_attempts AS "maxAttempts", run_at AS "runAt", started_at AS "startedAt", finished_at AS "finishedAt", last_error AS "lastError", result, created_at AS "createdAt" FROM jobs ${status ? sql`WHERE status = ${status}` : sql``} ORDER BY id DESC LIMIT 200`; return Response.json({ rows, stats: await stats() }); } catch (e) { return jsonError(e); } } export async function POST(req: Request) { try { const s = await requireUser(req); const { kind, payload } = z.object({ kind: z.enum(["link_sweep", "freshness_sweep", "embed_sweep", "backup", "link_check", "source_rescan", "embed_tool"]), payload: z.record(z.string(), z.unknown()).default({}) }).parse(await req.json()); const id = await enqueue(kind, payload, { priority: 1 }); await audit({ id: s.id, name: s.email }, "job.enqueue", { type: "job", id: String(id) }, { kind }); return Response.json({ ok: true, id }); } catch (e) { return jsonError(e); } }