← 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,
});
}