import { NextRequest, NextResponse } from "next/server"; import { db } from "@/lib/db"; import { createCheckoutSession, getOrCreateStripeCustomer } from "@/lib/stripe"; // Endpoint para iniciar checkout de Stripe // Body: { userId, influencerId, tier, price } export async function POST(request: NextRequest) { try { const body = await request.json(); const { userId, influencerId, tier, price } = body; const origin = request.headers.get("origin") || "http://localhost:7860"; if (!userId || !influencerId || !tier || !price) { return NextResponse.json({ success: false, error: "userId, influencerId, tier y price son requeridos" }, { status: 400 }); } // Obtener usuario e influencer const user = await db.user.findUnique({ where: { id: userId } }); if (!user) return NextResponse.json({ success: false, error: "Usuario no encontrado" }, { status: 404 }); const influencer = await db.aIInfluencer.findUnique({ where: { id: influencerId } }); if (!influencer) return NextResponse.json({ success: false, error: "Influencer no encontrado" }, { status: 404 }); // Crear o obtener cliente Stripe const email = user.email || `user-${userId}@dev.local`; const stripeCustomerId = await getOrCreateStripeCustomer(userId, email, user.name || undefined); // Crear sesión de checkout const sessionId = await createCheckoutSession({ userId, influencerId, influencerName: influencer.name, tier, price, stripeCustomerId, origin, }); return NextResponse.json({ success: true, sessionId, checkoutUrl: `https://checkout.stripe.com/pay/${sessionId}` }); } catch (error: unknown) { const message = error instanceof Error ? error.message : "Error desconocido"; console.error("Checkout error:", message); return NextResponse.json({ success: false, error: message }, { status: 500 }); } }