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