DEMO
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from datetime import datetime, timedelta
from typing import Dict
app = FastAPI()
# Simulando base de datos en memoria
clientes_db: Dict[str, Dict] = {}
# Modelo de entrada para registro y activación
class ClienteInput(BaseModel):
email: str
@app.post("/registrar-descarga")
def registrar_descarga(data: ClienteInput):
email = data.email.lower()
if email in clientes_db:
raise HTTPException(status_code=400, detail="Cliente ya registrado")
clientes_db[email] = {
"fecha_descarga": datetime.now(),
"licencia_activada": False
}
return {"mensaje": "Descarga registrada. Licencia demo activa por 30 días."}
@app.post("/activar-licencia")
def activar_licencia(data: ClienteInput):
email = data.email.lower()
if email not in clientes_db:
raise HTTPException(status_code=404, detail="Cliente no encontrado")
clientes_db[email]["licencia_activada"] = True
return {"mensaje": "Licencia activada. Acceso permanente habilitado."}
@app.get("/verificar-licencia")
def verificar_licencia(email: str):
email = email.lower()
cliente = clientes_db.get(email)
if not cliente:
raise HTTPException(status_code=404, detail="Cliente no registrado")
if cliente["licencia_activada"]:
return {"acceso": True, "mensaje": "Licencia activada. Acceso habilitado."}
dias_transcurridos = (datetime.now() - cliente["fecha_descarga"]).days
if dias_transcurridos <= 30:
return {"acceso": True, "mensaje": f"Demo activa. Quedan {30 - dias_transcurridos} días."}
else:
return {"acceso": False, "mensaje": "Periodo de demo terminado. Acceso restringido."}