Saltar a contenido

Modelos de la API

Modelo Base de Datos

Ubicacion

El modelo principal de la aplicación es Ubicacion, que representa una ubicación física de COPEC.

class Ubicacion(Base):
    __tablename__ = "ubicacion"

    id = Column(UUID, primary_key=True, index=True)
    name = Column(String, nullable=False)
    description = Column(Text, nullable=True)
    type = Column(String, nullable=False)
    latitude = Column(Float, nullable=False)
    longitude = Column(Float, nullable=False)

Campos

  • id: Identificador único UUID
  • name: Nombre de la ubicación
  • description: Descripción detallada (opcional)
  • type: Tipo de ubicación (PRONTO, BENCINERA, SERVICIO, OTRO)
  • latitude: Latitud geográfica
  • longitude: Longitud geográfica

Schemas Pydantic

UbicacionBase

Schema base que define los campos comunes:

class UbicacionBase(BaseModel):
    name: str
    description: Optional[str] = None
    type: str
    latitude: float
    longitude: float

UbicacionCreate

Schema usado para crear nuevas ubicaciones:

class UbicacionCreate(UbicacionBase):
    pass

Ubicacion

Schema completo que incluye el ID:

class Ubicacion(UbicacionBase):
    id: UUID

    class Config:
        orm_mode = True

Enumeraciones

UbicacionType

Define los tipos válidos de ubicaciones:

class UbicacionType(str, Enum):
    PRONTO = "pronto"
    BENCINERA = "bencinera"
    SERVICIO = "servicio"
    OTRO = "otro"

Validaciones

Los modelos incluyen las siguientes validaciones:

  1. Coordenadas Geográficas
  2. Latitud: entre -90 y 90
  3. Longitud: entre -180 y 180

  4. Tipos de Ubicación

  5. Solo se permiten los valores definidos en UbicacionType

  6. Campos Requeridos

  7. name
  8. type
  9. latitude
  10. longitude

Ejemplos de Uso

Crear una Nueva Ubicación

nueva_ubicacion = Ubicacion(
    id=uuid.uuid4(),
    name="Pronto Las Condes",
    description="Estación con servicios 24/7",
    type=UbicacionType.PRONTO,
    latitude=-33.4122,
    longitude=-70.5823
)

Consultar Ubicaciones por Tipo

ubicaciones_pronto = db.query(Ubicacion).filter(
    Ubicacion.type == UbicacionType.PRONTO
).all()