Gmagl
fix: correcciones cr铆ticas y refactorizaci贸n de componentes
3eebcd0
Raw
History Blame Contribute Delete
1.91 kB
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 });
}
}