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