← back to Omega Watches 2
src/app/api/quarantine/route.ts
65 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 resolved = searchParams.get("resolved") === "true";
const severity = searchParams.get("severity");
const limit = Math.min(parseInt(searchParams.get("limit") || "50"), 200);
let where = `WHERE qr.resolved = $1`;
const params: any[] = [resolved];
if (severity) {
params.push(severity);
where += ` AND qr.severity = $${params.length}`;
}
params.push(limit);
const records = await query(
`SELECT
qr.*,
me.source_name,
me.reference_number_raw,
me.price_usd,
me.event_type,
me.source_url
FROM quarantine_record qr
LEFT JOIN market_event me ON qr.event_id = me.event_id
${where}
ORDER BY
CASE qr.severity
WHEN 'critical' THEN 0
WHEN 'high' THEN 1
WHEN 'medium' THEN 2
WHEN 'low' THEN 3
END,
qr.created_at DESC
LIMIT $${params.length}`,
params
);
const counts = await query(
`SELECT severity, COUNT(*) as count
FROM quarantine_record WHERE resolved = false
GROUP BY severity`
);
return NextResponse.json({
success: true,
data: {
records,
severity_counts: counts,
},
meta: { total: records.length, timestamp: new Date().toISOString() },
});
}