Initial commit

This commit is contained in:
admin
2026-05-26 22:46:00 +02:00
commit 7e2c2ff89c
256 changed files with 51523 additions and 0 deletions
+55
View File
@@ -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);
}