File size: 3,403 Bytes
2695e7b
64e0349
2695e7b
ddb4143
 
5b38336
 
 
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
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)