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.
This commit is contained in:
92
backend/app/schemas/dispositivo.py
Normal file
92
backend/app/schemas/dispositivo.py
Normal file
@@ -0,0 +1,92 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user