Moibe's picture
Allow all dev
25f6e7d
raw
history blame
4.2 kB
import funciones
from fastapi import FastAPI, Form, HTTPException
from fastapi.responses import JSONResponse
from typing import Optional
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# Configuraci贸n de CORS
origins = [
"http://localhost",
"http://localhost:8000", # Si usas alg煤n puerto espec铆fico para tu frontend
"http://127.0.0.1:5500", # Puerto com煤n de Live Server
"https://buy.splashmix.com", # Si despliegas tu frontend, a帽ade su dominio aqu铆
"*" # 隆CUIDADO! '*' permite CUALQUIER origen. 脷salo solo para desarrollo o si sabes lo que haces.
# Es m谩s seguro especificar or铆genes concretos en producci贸n.
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True, # Permite cookies, cabeceras de autorizaci贸n, etc.
allow_methods=["*"], # Permite todos los m茅todos (GET, POST, PUT, DELETE, etc.)
allow_headers=["*"], # Permite todas las cabeceras
)
# Nuevo endpoint para Health Check
@app.get("/health",
tags=["Health Check"],
description="Verifica el estado de salud de la API.",
summary="Health Check"
)
async def health_check():
"""
Este endpoint devuelve una respuesta 200 OK para indicar que la API est谩 funcionando.
"""
return JSONResponse(content={"status": "ok"}, status_code=200)
@app.post("/creaCliente/")
async def creaCliente(
email: str = Form(...),
firebase_user: Optional[str] = Form(None),
site: Optional[str] = Form(None),
):
"""
Busca un cliente existente en Stripe por email.
Si no existe, lo crea con el email, Firebase User ID y site.
Args:
email (str): El correo electr贸nico del cliente.
firebase_user (str, opcional): El ID de usuario de Firebase asociado.
site (str, opcional): El nombre del sitio de origen.
Returns:
dict: Un diccionario con el ID del cliente de Stripe (existente o nuevo)
si la operaci贸n fue exitosa, indicando si fue encontrado o creado.
O un error si la operaci贸n fall贸.
"""
try:
# Llama a la funci贸n 'create_stripe_customer' y desempaca la tupla
customer_result = funciones.create_stripe_customer(
email=email,
firebase_user=firebase_user,
site=site
)
if customer_result:
customer, status = customer_result # Desempaca el objeto customer y el estado
message_text = ""
if status == "found":
message_text = "Cliente existente encontrado exitosamente."
elif status == "created":
message_text = "Nuevo cliente creado exitosamente."
else:
message_text = "Operaci贸n de cliente exitosa." # Fallback por si acaso
response_data = {
"message": message_text,
"status": status, # Agregamos el estado expl铆citamente tambi茅n
"customer_id": customer.id,
"customer_email": customer.email
}
if customer.metadata:
if 'firebase_user' in customer.metadata:
response_data['firebase_user'] = customer.metadata.firebase_user
if 'site' in customer.metadata:
response_data['site'] = customer.metadata.site
return response_data
else:
raise HTTPException(status_code=500, detail="No se pudo procesar la operaci贸n del cliente en Stripe. Verifica los logs del servidor.")
except HTTPException as e:
raise e
except Exception as e:
raise HTTPException(status_code=500, detail=f"Ocurri贸 un error inesperado al procesar la solicitud: {str(e)}")
@app.post("/creaLinkSesion/")
async def creaLinkSesion(
price_id: str = Form(...), # Sigue siendo requerido, enviado como Form si la petici贸n es multipart/form-data
customer_email: Optional[str] = Form(None), # Ahora opcional, valor por defecto None
customer_id: Optional[str] = Form(None) # Ahora opcional, valor por defecto None
):
return funciones.create_checkout_session(price_id, customer_email, customer_id)