← back to Omega Watches 2
src/app/api/sources/[source]/status/route.ts
56 lines
import { NextRequest, NextResponse } from "next/server";
import { query, queryOne } from "@/lib/db";
import { getSession } from "@/lib/auth";
export const dynamic = "force-dynamic";
export async function GET(
request: NextRequest,
{ params }: { params: { source: string } }
) {
const session = await getSession(request);
if (!session) {
return NextResponse.json({ success: false, error: { code: "UNAUTHORIZED", message: "Login required" } }, { status: 401 });
}
const source = await queryOne(
"SELECT * FROM data_source WHERE name = $1",
[params.source]
);
if (!source) {
return NextResponse.json({ success: false, error: { code: "NOT_FOUND", message: "Source not found" } }, { status: 404 });
}
const recentRuns = await query(
`SELECT * FROM collector_run WHERE source_id = $1 ORDER BY created_at DESC LIMIT 20`,
[source.id]
);
const currentParser = await queryOne(
`SELECT * FROM parser_version WHERE source_id = $1 AND is_current = true`,
[source.id]
);
const eventCounts = await queryOne(
`SELECT
COUNT(*) as total_events,
COUNT(*) FILTER (WHERE event_type = 'auction_realized') as auction_count,
COUNT(*) FILTER (WHERE event_type = 'marketplace_sold') as marketplace_count,
COUNT(*) FILTER (WHERE event_type = 'dealer_ask') as dealer_ask_count,
COUNT(*) FILTER (WHERE is_quarantined) as quarantined_count
FROM market_event WHERE source_name = $1`,
[params.source]
);
return NextResponse.json({
success: true,
data: {
source,
recent_runs: recentRuns,
current_parser: currentParser,
event_counts: eventCounts,
},
});
}