feat: add backend FastAPI structure and Supabase schema
This commit is contained in:
3
server/app/use_cases/__init__.py
Normal file
3
server/app/use_cases/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from app.use_cases.obtener_eta import ObtenerETAUseCase, ETAResponse
|
||||
|
||||
__all__ = ["ObtenerETAUseCase", "ETAResponse"]
|
||||
46
server/app/use_cases/obtener_eta.py
Normal file
46
server/app/use_cases/obtener_eta.py
Normal file
@@ -0,0 +1,46 @@
|
||||
"""
|
||||
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,
|
||||
)
|
||||
Reference in New Issue
Block a user