← back to Govarbitrage
src/app/api/billing/checkout/route.ts
23 lines
import { NextRequest, NextResponse } from "next/server";
import { getCurrentUser } from "@/lib/current-user";
import { createCheckout } from "@/lib/billing";
import type { Tier } from "@prisma/client";
export const dynamic = "force-dynamic";
// Start a (TEST/mock) subscription checkout for the chosen tier.
export async function POST(req: NextRequest) {
const user = await getCurrentUser();
if (!user) return NextResponse.json({ error: "sign in first" }, { status: 401 });
const { tier } = (await req.json().catch(() => ({}))) as { tier?: Tier };
if (tier !== "STANDARD" && tier !== "PREMIUM") {
return NextResponse.json({ error: "tier must be STANDARD or PREMIUM" }, { status: 400 });
}
const baseUrl = process.env.PUBLIC_BASE_URL || req.nextUrl.origin;
const result = await createCheckout({ userId: user.sub, email: user.email, tier, baseUrl });
if (!result.ok) return NextResponse.json({ error: result.error }, { status: 400 });
return NextResponse.json({ url: result.url, mode: result.mode });
}