Sistema completo para monitoreo y gestion de flotas de vehiculos con: - Backend FastAPI con PostgreSQL/TimescaleDB - Frontend React con TypeScript y TailwindCSS - App movil React Native con Expo - Soporte para dispositivos GPS, Meshtastic y celulares - Video streaming en vivo con MediaMTX - Geocercas, alertas, viajes y reportes - Autenticacion JWT y WebSockets en tiempo real Documentacion completa y guias de usuario incluidas.
109 lines
2.5 KiB
Python
109 lines
2.5 KiB
Python
"""
|
|
Schemas Pydantic para Configuración.
|
|
"""
|
|
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from pydantic import Field
|
|
|
|
from app.schemas.base import BaseSchema, TimestampSchema
|
|
|
|
|
|
class ConfiguracionBase(BaseSchema):
|
|
"""Schema base de configuración."""
|
|
|
|
clave: str = Field(..., min_length=2, max_length=100)
|
|
categoria: str = Field(default="general", max_length=50)
|
|
descripcion: Optional[str] = None
|
|
|
|
|
|
class ConfiguracionCreate(ConfiguracionBase):
|
|
"""Schema para crear configuración."""
|
|
|
|
valor: Any # Se convertirá a JSON
|
|
tipo_dato: str = Field(default="string", pattern="^(string|number|boolean|json|array)$")
|
|
sensible: bool = False
|
|
editable: bool = True
|
|
|
|
|
|
class ConfiguracionUpdate(BaseSchema):
|
|
"""Schema para actualizar configuración."""
|
|
|
|
valor: Any
|
|
descripcion: Optional[str] = None
|
|
|
|
|
|
class ConfiguracionResponse(ConfiguracionBase, TimestampSchema):
|
|
"""Schema de respuesta de configuración."""
|
|
|
|
valor_json: str
|
|
tipo_dato: str
|
|
sensible: bool
|
|
editable: bool
|
|
|
|
# Valor parseado
|
|
valor: Optional[Any] = None
|
|
|
|
|
|
class ConfiguracionResumen(BaseSchema):
|
|
"""Schema resumido de configuración."""
|
|
|
|
clave: str
|
|
categoria: str
|
|
valor: Any
|
|
tipo_dato: str
|
|
editable: bool
|
|
|
|
|
|
class ConfiguracionesPorCategoria(BaseSchema):
|
|
"""Schema con configuraciones agrupadas por categoría."""
|
|
|
|
categoria: str
|
|
configuraciones: List[ConfiguracionResumen]
|
|
|
|
|
|
class ConfiguracionesResponse(BaseSchema):
|
|
"""Schema de respuesta con todas las configuraciones."""
|
|
|
|
categorias: List[str]
|
|
configuraciones: Dict[str, List[ConfiguracionResumen]]
|
|
|
|
|
|
class ActualizarConfiguracionesRequest(BaseSchema):
|
|
"""Schema para actualizar múltiples configuraciones."""
|
|
|
|
configuraciones: Dict[str, Any] # {clave: valor}
|
|
|
|
|
|
class ConfiguracionesAlertasResponse(BaseSchema):
|
|
"""Schema específico para configuraciones de alertas."""
|
|
|
|
velocidad_maxima: int
|
|
parada_minutos: int
|
|
bateria_minima: int
|
|
sin_señal_minutos: int
|
|
motor_encendido_minutos: int
|
|
|
|
|
|
class ConfiguracionesViajesResponse(BaseSchema):
|
|
"""Schema específico para configuraciones de viajes."""
|
|
|
|
velocidad_minima: float
|
|
parada_minutos: int
|
|
|
|
|
|
class ConfiguracionesNotificacionesResponse(BaseSchema):
|
|
"""Schema específico para configuraciones de notificaciones."""
|
|
|
|
email_habilitado: bool
|
|
push_habilitado: bool
|
|
destinatarios: List[str]
|
|
|
|
|
|
class ConfiguracionesMapaResponse(BaseSchema):
|
|
"""Schema específico para configuraciones de mapa."""
|
|
|
|
centro_lat: float
|
|
centro_lng: float
|
|
zoom_default: int
|