← back to Omega Watches 2

src/app/api/jobs/daily-stats/route.ts

36 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 dailyStats = await query(`
    SELECT
      cr.started_at::date AS date,
      COUNT(*) AS total,
      COUNT(*) FILTER (WHERE cr.status = 'completed') AS completed,
      COUNT(*) FILTER (WHERE cr.status = 'failed') AS failed,
      COUNT(*) FILTER (WHERE cr.status = 'running') AS running,
      COUNT(*) FILTER (WHERE cr.status = 'pending') AS pending,
      COALESCE(SUM(cr.records_inserted), 0) AS records_inserted
    FROM collector_run cr
    WHERE cr.started_at >= CURRENT_DATE - 30
    GROUP BY cr.started_at::date
    ORDER BY date
  `);

  return NextResponse.json({
    success: true,
    data: dailyStats,
  });
}