3d30e7dc8b
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { prisma } from "@/lib/db";
|
|
|
|
async function getFlag(key: string): Promise<boolean> {
|
|
const row = await prisma.config.findUnique({ where: { key } });
|
|
return row?.value === "true";
|
|
}
|
|
|
|
async function setFlag(key: string, value: boolean): Promise<void> {
|
|
const v = value ? "true" : "false";
|
|
await prisma.config.upsert({
|
|
where: { key },
|
|
create: { key, value: v, secret: false },
|
|
update: { value: v },
|
|
});
|
|
}
|
|
|
|
export async function GET() {
|
|
return Response.json({ paused: await getFlag("floor.paused") });
|
|
}
|
|
|
|
export async function POST(request: Request) {
|
|
let body: { action?: string };
|
|
try {
|
|
body = (await request.json()) as { action?: string };
|
|
} catch {
|
|
return Response.json({ error: "invalid JSON" }, { status: 400 });
|
|
}
|
|
|
|
switch (body.action) {
|
|
case "pause":
|
|
await setFlag("floor.paused", true);
|
|
return Response.json({ ok: true, paused: true });
|
|
case "resume":
|
|
await setFlag("floor.paused", false);
|
|
return Response.json({ ok: true, paused: false });
|
|
case "stop":
|
|
await setFlag("floor.paused", true);
|
|
await setFlag("floor.killRequested", true);
|
|
return Response.json({ ok: true, paused: true, stopped: true });
|
|
case "clear": {
|
|
const { count } = await prisma.request.deleteMany({
|
|
where: { job: { is: { state: "requested" } } },
|
|
});
|
|
return Response.json({ ok: true, cleared: count });
|
|
}
|
|
default:
|
|
return Response.json({ error: "unknown action" }, { status: 400 });
|
|
}
|
|
}
|