feat: add backend FastAPI structure and Supabase schema
This commit is contained in:
77
server/app/domain/entities/ruta.py
Normal file
77
server/app/domain/entities/ruta.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
Entidades del dominio — sin dependencias externas.
|
||||
Alineadas con el esquema de Persona A.
|
||||
"""
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class EstadoCamion(str, Enum):
|
||||
EN_RUTA = "EN_RUTA"
|
||||
APROXIMANDOSE = "APROXIMANDOSE"
|
||||
COMPLETADO = "COMPLETADO"
|
||||
AVERIADA = "AVERIADA" # truck_status: AVERIADA
|
||||
RETRASADA = "RETRASADA" # truck_status: RETRASADA
|
||||
|
||||
|
||||
class TipoNotificacion(str, Enum):
|
||||
RUTA_INICIADA = "ruta_iniciada"
|
||||
APROXIMANDOSE = "aproximandose"
|
||||
COMPLETADO = "completado"
|
||||
FALLA_MECANICA = "falla_mecanica"
|
||||
RUTA_TARDE = "ruta_tarde"
|
||||
|
||||
|
||||
@dataclass
|
||||
class Coordenada:
|
||||
lat: float
|
||||
lng: float
|
||||
|
||||
|
||||
@dataclass
|
||||
class PuntoRuta:
|
||||
orden: int # == current_position_id en truck_status
|
||||
nombre: str
|
||||
coordenada: Coordenada
|
||||
tiempo_estimado_min: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class Ruta:
|
||||
id: str # ej. "RUTA-01"
|
||||
nombre: str
|
||||
puntos: list[PuntoRuta] = field(default_factory=list)
|
||||
turno: str = "mañana"
|
||||
|
||||
|
||||
@dataclass
|
||||
class TruckStatus:
|
||||
"""Espejo directo de la tabla truck_status de Persona A."""
|
||||
route_id: str
|
||||
current_position_id: int
|
||||
last_update: datetime
|
||||
status: EstadoCamion
|
||||
|
||||
|
||||
@dataclass
|
||||
class NotificationPreferences:
|
||||
"""Preferencias del usuario — leídas antes de cada notificación."""
|
||||
user_id: int
|
||||
notify_proximity: bool = True
|
||||
notify_breakdown: bool = True
|
||||
notify_delay: bool = True
|
||||
notify_route_start: bool = True
|
||||
|
||||
|
||||
@dataclass
|
||||
class ETAResult:
|
||||
"""Lo que ve el ciudadano — sin coordenadas, sin índice de waypoint."""
|
||||
address_id: int
|
||||
route_id: str
|
||||
status: str
|
||||
eta_minutos: Optional[int]
|
||||
ventana_inicio: Optional[str] # ej. "7:20 pm"
|
||||
ventana_fin: Optional[str] # ej. "7:35 pm"
|
||||
mensaje: str
|
||||
Reference in New Issue
Block a user