← back to Omega Watches 2

src/app/api/msrp/[reference]/route.ts

71 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: { reference: string } }
) {
  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 region = searchParams.get("region") || "US";

  const ref = await queryOne(
    "SELECT * FROM watch_reference WHERE reference_number = $1",
    [params.reference]
  );

  if (!ref) {
    return NextResponse.json({ success: false, error: { code: "NOT_FOUND", message: "Reference not found" } }, { status: 404 });
  }

  // Current MSRP (latest snapshot per region)
  const currentMSRP = await query(
    `SELECT DISTINCT ON (region_code)
      region_code, currency, msrp_amount, captured_date, source_url
    FROM msrp_snapshot
    WHERE reference_id = $1
    ORDER BY region_code, captured_date DESC`,
    [ref.id]
  );

  // MSRP history for requested region
  const history = await query(
    `SELECT captured_date, msrp_amount, currency, source_url, page_hash
     FROM msrp_snapshot
     WHERE reference_id = $1 AND region_code = $2
     ORDER BY captured_date`,
    [ref.id, region]
  );

  // MSRP changes for this reference
  const changes = await query(
    `SELECT * FROM msrp_changes
     WHERE reference_id = $1
     ORDER BY change_date DESC
     LIMIT 50`,
    [ref.id]
  );

  return NextResponse.json({
    success: true,
    data: {
      reference: ref,
      current_msrp: currentMSRP,
      history,
      changes,
    },
    meta: {
      region_requested: region,
      regions_available: currentMSRP.map((r: any) => r.region_code),
      timestamp: new Date().toISOString(),
    },
  });
}