diff --git a/src/app/api/task/route.ts b/src/app/api/task/route.ts new file mode 100644 index 00000000..7badcd4e --- /dev/null +++ b/src/app/api/task/route.ts @@ -0,0 +1,45 @@ +import { db } from "@/app/db/db"; +import { tasks } from "@/app/db/schema/tasks/tasks"; +import { InferSelectModel, eq, and, desc } from "drizzle-orm"; +import { NextRequest, NextResponse } from "next/server"; + +type Task = InferSelectModel; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + + const source = searchParams.get("source"); + const sourceId = searchParams.get("source_id"); + const service = searchParams.get("service"); + + if (!source || !sourceId || !service) { + return NextResponse.json( + { error: "Missing required query params" }, + { status: 400 }, + ); + } + + const result: Task[] = await db + .select() + .from(tasks) + .where( + and( + eq(tasks.source, source as any), // cast needed for enum + eq(tasks.sourceId, sourceId), + eq(tasks.service, service), + ), + ) + .orderBy(desc(tasks.jobStarted)) + .limit(1); + + const task = result[0]; + + if (!task) { + return NextResponse.json( + { error: "Task not found" }, + { status: 404 }, + ); + } + + return NextResponse.json({ task }); +} \ No newline at end of file