import { NextResponse } from "next/server"; import Stripe from "stripe"; import { createClient } from "@supabase/supabase-js"; const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); const supabase = createClient(process.env.SUPABASE_SERVICE_ROLE_KEY); export async function POST(request) { try { const { clientId, customerId } = await request.json(); const { data: userData, error: userError } = await supabase .from("subscription_data") .select("*") .eq("customer_id", customerId) .maybeSingle(); if (userError || !userData) { return NextResponse.json( { error: "subscription_data not found" }, { status: 404 } ); } const { subscription_cost } = userData; // Create a new product and price const product = await stripe.products.create({ name: "RankRunners Client Subscription", }); const price = await stripe.prices.create({ product: product.id, unit_amount: subscription_cost * 100, currency: "usd", recurring: { interval: "month" }, }); // Create a Checkout session const session = await stripe.checkout.sessions.create({ customer: customerId, payment_method_types: ["card"], line_items: [ { price: price.id, quantity: 1, }, ], mode: "subscription", success_url: `${process.env.NEXT_PUBLIC_URL}/client-area?session_id={CHECKOUT_SESSION_ID}`, cancel_url: `${process.env.NEXT_PUBLIC_URL}/client-area`, }); if (!session) { return NextResponse.json( { error: "Failed to create checkout session" }, { status: 500 } ); } // Save the session ID to Supabase const { error: updateError } = await supabase .from("subscription_data") .update({ stripe_session_id: session.id }) .eq("customer_id", customerId); if (updateError) { console.error("Error updating stripe_session_id:", updateError); return NextResponse.json( { error: "Failed to update subscription data when creating checkout session", }, { status: 500 } ); } return NextResponse.json({ url: session.url }); } catch (error) { console.error("Error creating checkout session:", error); return NextResponse.json({ error: error.message }, { status: 500 }); } }