feat(discovery): POST/GET /api/discover/run trigger + status
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { prisma } from "@/lib/db";
|
||||
import { POST, GET } from "./route";
|
||||
|
||||
describe("discover run API", () => {
|
||||
it("POST sets discover.requested and GET reflects it", async () => {
|
||||
const res = await POST(new Request("http://localhost/api/discover/run", { method: "POST" }));
|
||||
expect(res.status).toBe(202);
|
||||
expect((await res.json()).requested).toBe(true);
|
||||
expect((await prisma.config.findUnique({ where: { key: "discover.requested" } }))?.value).toBe("true");
|
||||
|
||||
const body = await (await GET()).json();
|
||||
expect(body.requested).toBe(true);
|
||||
expect(body.result).toBeNull();
|
||||
});
|
||||
|
||||
it("GET returns discover.result when the worker has written it", async () => {
|
||||
await prisma.config.create({ data: { key: "discover.result", value: "artists 3, albums 1" } });
|
||||
expect((await (await GET()).json()).result).toBe("artists 3, albums 1");
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { prisma } from "@/lib/db";
|
||||
|
||||
export async function POST(_request: Request) {
|
||||
await prisma.config.upsert({
|
||||
where: { key: "discover.requested" },
|
||||
create: { key: "discover.requested", value: "true", secret: false },
|
||||
update: { value: "true" },
|
||||
});
|
||||
return Response.json({ requested: true }, { status: 202 });
|
||||
}
|
||||
|
||||
export async function GET() {
|
||||
const [requested, result] = await Promise.all([
|
||||
prisma.config.findUnique({ where: { key: "discover.requested" } }),
|
||||
prisma.config.findUnique({ where: { key: "discover.result" } }),
|
||||
]);
|
||||
return Response.json({
|
||||
requested: requested?.value === "true",
|
||||
result: result?.value ?? null,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user