← back to Omega Watches 2

src/app/api/jobs/route.ts

47 lines

import { NextRequest, NextResponse } from "next/server";
import { query } from "@/lib/db";
import { getSession } from "@/lib/auth";

export const dynamic = "force-dynamic";

export async function GET(request: NextRequest) {
  const session = await getSession(request);
  if (!session) {
    return NextResponse.json({ success: false, error: { code: "UNAUTHORIZED", message: "Login required" } }, { status: 401 });
  }

  const { searchParams } = new URL(request.url);
  const date = searchParams.get("date");
  const status = searchParams.get("status");
  const limit = Math.min(parseInt(searchParams.get("limit") || "50"), 200);

  let whereClause = "WHERE 1=1";
  const params: any[] = [];

  if (date) {
    params.push(date);
    whereClause += ` AND cr.started_at::date = $${params.length}`;
  }
  if (status) {
    params.push(status);
    whereClause += ` AND cr.status = $${params.length}`;
  }

  params.push(limit);
  const runs = await query(
    `SELECT cr.*, ds.name as source_name, ds.display_name as source_display_name
     FROM collector_run cr
     JOIN data_source ds ON cr.source_id = ds.id
     ${whereClause}
     ORDER BY cr.created_at DESC
     LIMIT $${params.length}`,
    params
  );

  return NextResponse.json({
    success: true,
    data: runs,
    meta: { total: runs.length, timestamp: new Date().toISOString() },
  });
}