← back to Trademarks Copyright

src/app/api/drops/admin/subscribers/[id]/route.ts

30 lines

import { NextRequest, NextResponse } from "next/server";
import { query } from "@/lib/db";

export async function PATCH(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  const numId = Number(id);
  if (!Number.isFinite(numId)) return NextResponse.json({ error: "bad id" }, { status: 400 });

  const body = await req.json().catch(() => ({}));
  if (!body || typeof body !== "object" || Array.isArray(body)) {
    return NextResponse.json({ error: "json object body required" }, { status: 400 });
  }
  const allowed = ["tier", "status", "notes", "trial_drops_left"] as const;
  const updates: Record<string, unknown> = {};
  for (const f of allowed) if (f in body) updates[f] = body[f];
  if (!Object.keys(updates).length) return NextResponse.json({ error: "no fields" }, { status: 400 });

  const set = Object.keys(updates).map((k, i) => `${k} = $${i + 2}`).join(", ");
  const values = Object.values(updates);
  const { rows } = await query(
    `UPDATE subscribers SET ${set} WHERE id = $1 RETURNING id, email, tier, status, trial_drops_left, notes`,
    [numId, ...values]
  );
  if (!rows.length) return NextResponse.json({ error: "not found" }, { status: 404 });
  return NextResponse.json({ ok: true, subscriber: rows[0] });
}