← back to Trademarks Copyright
src/app/api/drops/preview/[token]/[id]/route.ts
32 lines
import { NextRequest, NextResponse } from "next/server";
import { query } from "@/lib/db";
import { renderDropHTML } from "@/lib/drops";
/**
* Renders the raw email HTML for a drop + subscriber combo — useful for
* verifying rendering in a browser (open /api/drops/preview/<token>/<dropId>).
* Requires a valid subscriber token.
*/
export async function GET(
req: NextRequest,
{ params }: { params: Promise<{ token: string; id: string }> }
) {
const { token, id } = await params;
const dropId = Number(id);
if (!Number.isFinite(dropId)) return NextResponse.json({ error: "bad id" }, { status: 400 });
const { rows } = await query<{ tier: string; token: string }>(
`SELECT tier, token FROM subscribers WHERE token = $1`, [token]
);
if (!rows.length) return NextResponse.json({ error: "unknown subscriber" }, { status: 404 });
const { html } = await renderDropHTML({
dropId,
tier: rows[0].tier as "trial" | "standard" | "pro" | "comp",
subscriberToken: rows[0].token,
appBaseUrl: req.nextUrl.origin,
});
return new Response(html, { headers: { "content-type": "text/html; charset=utf-8" } });
}