Files
ATLAS/backend/app/schemas/dispositivo.py
FlotillasGPS Developer 51d78bacf4 FlotillasGPS - Sistema completo de monitoreo de flotillas GPS
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.
2026-01-21 08:18:00 +00:00

93 lines
2.9 KiB
Python

"""
Schemas Pydantic para Dispositivo GPS/Tracker.
"""
from datetime import datetime
from typing import Optional
from pydantic import Field
from app.schemas.base import BaseSchema, TimestampSchema
class DispositivoBase(BaseSchema):
"""Schema base de dispositivo."""
tipo: str = Field(default="gps", max_length=50)
identificador: str = Field(..., min_length=1, max_length=100)
nombre: Optional[str] = Field(None, max_length=100)
marca: Optional[str] = Field(None, max_length=50)
modelo: Optional[str] = Field(None, max_length=50)
numero_serie: Optional[str] = Field(None, max_length=100)
telefono_sim: Optional[str] = Field(None, max_length=20)
operador_sim: Optional[str] = Field(None, max_length=50)
iccid: Optional[str] = Field(None, max_length=25)
imei: Optional[str] = Field(None, max_length=20)
protocolo: str = Field(default="osmand", max_length=50)
intervalo_reporte: int = Field(default=30, ge=1, le=3600)
class DispositivoCreate(DispositivoBase):
"""Schema para crear dispositivo."""
vehiculo_id: int
class DispositivoUpdate(BaseSchema):
"""Schema para actualizar dispositivo."""
tipo: Optional[str] = Field(None, max_length=50)
nombre: Optional[str] = Field(None, max_length=100)
marca: Optional[str] = Field(None, max_length=50)
modelo: Optional[str] = Field(None, max_length=50)
numero_serie: Optional[str] = Field(None, max_length=100)
telefono_sim: Optional[str] = Field(None, max_length=20)
operador_sim: Optional[str] = Field(None, max_length=50)
iccid: Optional[str] = Field(None, max_length=25)
imei: Optional[str] = Field(None, max_length=20)
protocolo: Optional[str] = Field(None, max_length=50)
intervalo_reporte: Optional[int] = Field(None, ge=1, le=3600)
configuracion: Optional[str] = None
firmware_version: Optional[str] = Field(None, max_length=50)
activo: Optional[bool] = None
notas: Optional[str] = None
class DispositivoResponse(DispositivoBase, TimestampSchema):
"""Schema de respuesta de dispositivo."""
id: int
vehiculo_id: int
ultimo_contacto: Optional[datetime] = None
bateria: Optional[float] = None
señal_gsm: Optional[int] = None
satelites: Optional[int] = None
configuracion: Optional[str] = None
firmware_version: Optional[str] = None
activo: bool
conectado: bool
notas: Optional[str] = None
# Calculado
esta_online: bool
class DispositivoResumen(BaseSchema):
"""Schema resumido de dispositivo."""
id: int
identificador: str
tipo: str
protocolo: str
activo: bool
conectado: bool
ultimo_contacto: Optional[datetime] = None
bateria: Optional[float] = None
class DispositivoConVehiculo(DispositivoResponse):
"""Schema de dispositivo con información del vehículo."""
vehiculo_nombre: Optional[str] = None
vehiculo_placa: Optional[str] = None