Actualizar backend/main.py

This commit is contained in:
2026-09-11 15:35:35 -05:00
parent 9e9ac1f901
commit 2d38e7e06d

View File

@@ -36,6 +36,21 @@ def _startup():
# Refresco cada 4 min en segundo plano (TTL del caché es 5 min) # Refresco cada 4 min en segundo plano (TTL del caché es 5 min)
start_background_refresh(services.refrescar_todo, interval=1800) start_background_refresh(services.refrescar_todo, interval=1800)
# Historial de estado de asesores: revisa Chatwoot cada 5 min y guarda los
# cambios (ON/OFF) en historial_estado_asesor. Solo entre 05:00 y 23:59.
import threading, time as _t
from datetime import datetime as _dt
def _loop_asesores():
while True:
try:
h = _dt.now().hour
if 5 <= h <= 23:
services.registrar_estado_asesores()
except Exception as e:
print(f"[historial asesores loop] {e}")
_t.sleep(300)
threading.Thread(target=_loop_asesores, daemon=True).start()
# ── Salud / utilidades ───────────────────────────────────────────────────── # ── Salud / utilidades ─────────────────────────────────────────────────────
@app.get("/api/health") @app.get("/api/health")
@@ -383,6 +398,20 @@ def post_usuario_rol(payload: dict = Body(...)):
except Exception as e: except Exception as e:
raise HTTPException(status_code=500, detail=str(e)) raise HTTPException(status_code=500, detail=str(e))
@app.post("/api/usuarios/email")
def post_usuario_email(payload: dict = Body(...)):
try:
return services.usuarios_actualizar_email(payload.get("id",""), payload.get("email",""))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/api/usuarios/password")
def post_usuario_password(payload: dict = Body(...)):
try:
return services.usuarios_actualizar_password(payload.get("id",""), payload.get("password",""))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/api/usuarios/eliminar") @app.post("/api/usuarios/eliminar")
def post_usuario_eliminar(payload: dict = Body(...)): def post_usuario_eliminar(payload: dict = Body(...)):
try: try:
@@ -390,6 +419,34 @@ def post_usuario_eliminar(payload: dict = Body(...)):
except Exception as e: except Exception as e:
raise HTTPException(status_code=500, detail=str(e)) raise HTTPException(status_code=500, detail=str(e))
@app.get("/api/roles")
def get_roles():
try:
return services.roles_listar()
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/api/roles/modulos")
def get_roles_modulos():
try:
return services.roles_modulos_disponibles()
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/api/roles/guardar")
def post_rol_guardar(payload: dict = Body(...)):
try:
return services.rol_guardar(payload.get("rol",""), payload.get("modulos",[]))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/api/roles/eliminar")
def post_rol_eliminar(payload: dict = Body(...)):
try:
return services.rol_eliminar(payload.get("rol",""))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# ── VENDEDORES MANUALES (Comisiones) ─────────────────────────────────────── # ── VENDEDORES MANUALES (Comisiones) ───────────────────────────────────────
@app.get("/api/comisiones/vendedores") @app.get("/api/comisiones/vendedores")
@@ -511,5 +568,20 @@ def set_asesor_estado(agent_id: int = Query(...), online: bool = Query(...)):
raise HTTPException(status_code=500, detail=str(e)) raise HTTPException(status_code=500, detail=str(e))
@app.get("/api/asesores/historial")
def get_asesor_historial(email: str = Query(...)):
try:
return services.historial_asesor(email)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/api/asesores/registrar")
def post_asesor_registrar():
try:
return services.registrar_estado_asesores()
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__": if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=False) uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=False)