← back to Omega Watches 2

src/app/api/quarantine/[id]/resolve/route.ts

52 lines

import { NextRequest, NextResponse } from "next/server";
import { queryOne } from "@/lib/db";
import { getSession, requireRole } from "@/lib/auth";

export async function POST(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  const session = await getSession(request);
  if (!session) {
    return NextResponse.json({ success: false, error: { code: "UNAUTHORIZED", message: "Login required" } }, { status: 401 });
  }
  requireRole(session, ["admin", "operator"]);

  const { resolution_notes, action } = await request.json();

  if (!resolution_notes) {
    return NextResponse.json(
      { success: false, error: { code: "MISSING_NOTES", message: "Resolution notes required" } },
      { status: 400 }
    );
  }

  const record = await queryOne(
    `UPDATE quarantine_record
     SET resolved = true, resolved_by = $1, resolved_at = NOW(), resolution_notes = $2
     WHERE id = $3 AND resolved = false
     RETURNING *`,
    [session.username, resolution_notes, params.id]
  );

  if (!record) {
    return NextResponse.json(
      { success: false, error: { code: "NOT_FOUND", message: "Quarantine record not found or already resolved" } },
      { status: 404 }
    );
  }

  // If action is "release", un-quarantine the market event
  if (action === "release" && record.event_id) {
    await queryOne(
      `UPDATE market_event SET is_quarantined = false, quarantine_reason = NULL WHERE event_id = $1 RETURNING event_id`,
      [record.event_id]
    );
  }

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