diff --git a/apps/backoffice/app/api/jobs/list/route.ts b/apps/backoffice/app/api/jobs/list/route.ts new file mode 100644 index 0000000..7bf103f --- /dev/null +++ b/apps/backoffice/app/api/jobs/list/route.ts @@ -0,0 +1,11 @@ +import { NextResponse } from "next/server"; +import { listJobs } from "@/lib/api"; + +export async function GET() { + try { + const data = await listJobs(); + return NextResponse.json(data); + } catch (error) { + return NextResponse.json({ error: "Failed to fetch jobs" }, { status: 500 }); + } +} diff --git a/apps/backoffice/app/components/JobsList.tsx b/apps/backoffice/app/components/JobsList.tsx index 1f3bb46..91a5c50 100644 --- a/apps/backoffice/app/components/JobsList.tsx +++ b/apps/backoffice/app/components/JobsList.tsx @@ -95,9 +95,21 @@ export function JobsList({ initialJobs, libraries, highlightJobId }: JobsListPro } }; + const refreshJobs = async () => { + try { + const res = await fetch("/api/jobs/list"); + if (res.ok) { + const data = await res.json(); + if (Array.isArray(data)) setJobs(data); + } + } catch { /* SSE will catch up */ } + }; + const handleReplay = async (id: string) => { const response = await fetch(`/api/jobs/${id}/replay`, { method: "POST" }); - if (!response.ok) { + if (response.ok) { + await refreshJobs(); + } else { const data = await response.json().catch(() => ({})); console.error("Failed to replay job:", data?.error ?? response.status); }