Spaces:
Running
Running
File size: 4,202 Bytes
2695e7b 64e0349 2695e7b ddb4143 73e18ed 5b38336 73e18ed 25f6e7d 73e18ed bddc6a2 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 11cdb7c 64e0349 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
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) |