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 @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)