From c6945bd89e5bc03f49bd551dff29c4e815577367 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 15 Jul 2026 12:24:42 +0200 Subject: [PATCH] =?UTF-8?q?feat(web):=20inter-job=20download=20delay=20set?= =?UTF-8?q?ting=20(Settings=20=E2=86=92=20Monitor)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- web/src/app/api/monitor/config/route.test.ts | 20 ++++++++++++++++++++ web/src/app/api/monitor/config/route.ts | 1 + web/src/app/settings/settings-form.tsx | 1 + 3 files changed, 22 insertions(+) diff --git a/web/src/app/api/monitor/config/route.test.ts b/web/src/app/api/monitor/config/route.test.ts index cec2a27..21b2f34 100644 --- a/web/src/app/api/monitor/config/route.test.ts +++ b/web/src/app/api/monitor/config/route.test.ts @@ -34,3 +34,23 @@ describe("monitor config API", () => { expect(await prisma.config.count()).toBe(before); }); }); + +describe("monitor config — floor.jobDelaySeconds", () => { + it("defaults jobDelaySeconds to 0 and round-trips a new value", async () => { + const before = await (await GET()).json(); + expect(before["floor.jobDelaySeconds"]).toBe("0"); + + await PATCH( + new Request("http://localhost/api/monitor/config", { + method: "PATCH", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ "floor.jobDelaySeconds": "45" }), + }), + ); + + const stored = await prisma.config.findUnique({ where: { key: "floor.jobDelaySeconds" } }); + expect(stored?.value).toBe("45"); + const after = await (await GET()).json(); + expect(after["floor.jobDelaySeconds"]).toBe("45"); + }); +}); diff --git a/web/src/app/api/monitor/config/route.ts b/web/src/app/api/monitor/config/route.ts index e92bc0e..2f63cb8 100644 --- a/web/src/app/api/monitor/config/route.ts +++ b/web/src/app/api/monitor/config/route.ts @@ -6,6 +6,7 @@ const DEFAULTS: Record = { "monitor.retryIntervalHours": "6", "monitor.qualityCutoff": "2", "monitor.upgradeWindowDays": "14", + "floor.jobDelaySeconds": "0", }; export async function GET() { diff --git a/web/src/app/settings/settings-form.tsx b/web/src/app/settings/settings-form.tsx index 8f48202..729d50a 100644 --- a/web/src/app/settings/settings-form.tsx +++ b/web/src/app/settings/settings-form.tsx @@ -31,6 +31,7 @@ const MONITOR_FIELDS: [string, string][] = [ ["monitor.retryIntervalHours", "Retry interval (hours)"], ["monitor.qualityCutoff", "Quality cutoff"], ["monitor.upgradeWindowDays", "Upgrade window (days)"], + ["floor.jobDelaySeconds", "Delay between downloads (seconds)"], ]; export function SettingsForm() {