feat: add backend FastAPI structure and Supabase schema

This commit is contained in:
Alan Alonso
2026-05-23 00:41:13 -06:00
parent 17cdde7dbb
commit e6eb466c14
38 changed files with 1760 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
from app.use_cases.obtener_eta import ObtenerETAUseCase, ETAResponse
__all__ = ["ObtenerETAUseCase", "ETAResponse"]

View 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,
)