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