Spaces:
Sleeping
Sleeping
import funciones | |
from fastapi import FastAPI, Form, HTTPException | |
from fastapi.responses import JSONResponse | |
from typing import Optional | |
import globales | |
app = FastAPI() | |
# Nuevo endpoint para 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) | |
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)}") | |
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) |