Actualizar backend/main.py
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user