Initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { assertLocalRequest } from "@/lib/api/localOnly";
|
||||
import { enqueueJob, clearAllJobHistory, runRetentionSweep } from "@/lib/whisperjav/queue";
|
||||
import { listJobsForCode } from "@/lib/whisperjav/db";
|
||||
|
||||
export const runtime = "nodejs";
|
||||
export const dynamic = "force-dynamic";
|
||||
|
||||
export async function POST(req: NextRequest) {
|
||||
const blocked = assertLocalRequest(req);
|
||||
if (blocked) return blocked;
|
||||
|
||||
const body = await req.json().catch(() => ({}));
|
||||
const code = typeof body.code === "string" ? body.code.trim() : "";
|
||||
const rawPartIdx = typeof body.partIdx === "number" && Number.isFinite(body.partIdx) ? body.partIdx : 0;
|
||||
const partIdx = Math.max(0, Math.floor(rawPartIdx));
|
||||
const overwrite = body.overwrite === true;
|
||||
if (!code) return NextResponse.json({ error: "Missing code" }, { status: 400 });
|
||||
|
||||
try {
|
||||
const result = await enqueueJob({ code, partIdx, overwrite });
|
||||
if ("alreadyExists" in result) {
|
||||
return NextResponse.json(result, { status: 409 });
|
||||
}
|
||||
return NextResponse.json(result, { status: 202 });
|
||||
} catch (e) {
|
||||
return NextResponse.json({ error: (e as Error).message }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
const blocked = assertLocalRequest(req);
|
||||
if (blocked) return blocked;
|
||||
|
||||
const code = req.nextUrl.searchParams.get("code") ?? "";
|
||||
if (!code) return NextResponse.json({ jobs: [] });
|
||||
const jobs = listJobsForCode(code, 5);
|
||||
return NextResponse.json({ jobs });
|
||||
}
|
||||
|
||||
/** Clear-all-history. Wipes every non-running row + every temp dir. */
|
||||
export async function DELETE(req: NextRequest) {
|
||||
const blocked = assertLocalRequest(req);
|
||||
if (blocked) return blocked;
|
||||
const result = await clearAllJobHistory();
|
||||
return NextResponse.json(result);
|
||||
}
|
||||
|
||||
/** Manual retention sweep trigger. */
|
||||
export async function PATCH(req: NextRequest) {
|
||||
const blocked = assertLocalRequest(req);
|
||||
if (blocked) return blocked;
|
||||
const result = await runRetentionSweep();
|
||||
return NextResponse.json(result);
|
||||
}
|
||||
Reference in New Issue
Block a user