Files
hackathon-acapulquitos-boys…/server/app/use_cases/obtener_eta.py

46 lines
1.2 KiB
Python

"""
Caso de Uso: ObtenerETA
Orquesta la lógica: valida que la zona pertenece al usuario,
busca la ruta asignada y devuelve solo el ETA.
"""
from dataclasses import dataclass
from typing import Optional
from app.domain.interfaces.i_ruta_repository import IRutaRepository
@dataclass
class ETAResponse:
zona_id: str
estado: str
eta_minutos: Optional[int]
mensaje: str
ruta_nombre: str
class ObtenerETAUseCase:
def __init__(self, repo: IRutaRepository):
self.repo = repo
def ejecutar(self, zona_id: str) -> Optional[ETAResponse]:
ruta = self.repo.obtener_ruta_por_zona(zona_id)
if not ruta:
return None
estado = self.repo.obtener_estado(ruta.id)
if not estado:
return ETAResponse(
zona_id=zona_id,
estado="sin_iniciar",
eta_minutos=None,
mensaje="El camión aún no ha iniciado su ruta para hoy.",
ruta_nombre=ruta.nombre,
)
return ETAResponse(
zona_id=zona_id,
estado=estado.estado.value,
eta_minutos=estado.eta_minutos,
mensaje=estado.mensaje,
ruta_nombre=ruta.nombre,
)