Co-authored-by: Azareth-Tr <Azareth-Tr@users.noreply.githu b.com> correcion de errores en llenado de tablas, primeras vistas frontend
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from app.services import simulation
|
|
from app.core.deps import get_current_user
|
|
from app.core.supabase_client import supabase_admin
|
|
|
|
router = APIRouter(tags=["eta"])
|
|
|
|
|
|
@router.get("/eta")
|
|
def get_eta(
|
|
address_id: str,
|
|
current_user: dict = Depends(get_current_user),
|
|
):
|
|
"""
|
|
ETA para el ciudadano.
|
|
- Recibe `address_id` (domicilio del usuario autenticado).
|
|
- Valida que el domicilio pertenezca al usuario (túnel de privacidad).
|
|
- Devuelve SOLO texto: nunca coordenadas ni routeId completo.
|
|
"""
|
|
result = (
|
|
supabase_admin.table("addresses")
|
|
.select("route_id, user_id")
|
|
.eq("id", address_id)
|
|
.maybe_single()
|
|
.execute()
|
|
)
|
|
|
|
if not result.data:
|
|
raise HTTPException(status_code=404, detail="Domicilio no encontrado")
|
|
|
|
address = result.data
|
|
|
|
# Túnel: ciudadano solo puede consultar sus propios domicilios
|
|
if current_user["role"] != "admin" and address["user_id"] != current_user["user_id"]:
|
|
raise HTTPException(status_code=403, detail="No tienes acceso a este domicilio")
|
|
|
|
route_id = address["route_id"]
|
|
pos = simulation.get_route_position(route_id)
|
|
status = simulation.get_route_status(route_id)
|
|
|
|
if pos is None:
|
|
raise HTTPException(status_code=503, detail="Simulación no disponible")
|
|
|
|
if pos < 4:
|
|
mensaje = "El camión va en camino a tu sector"
|
|
elif pos == 4:
|
|
mensaje = "Llega en aproximadamente 15 minutos — saca tus bolsas"
|
|
elif pos < 8:
|
|
mensaje = "Está atendiendo tu zona; prepara tus bolsas"
|
|
else:
|
|
mensaje = "Servicio del día finalizado. Mañana continuamos"
|
|
|
|
# ⚠️ Nunca devolver coordenadas ni el routeId al ciudadano
|
|
return {"mensaje": mensaje, "status": status}
|