stripe-kraken / app.py
Moibe's picture
Hostname verify
ddb4143
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)