Files
weather-data-api/app/models.py
T
2026-06-20 12:44:32 +08:00

51 lines
1.2 KiB
Python

from datetime import datetime
from pydantic import BaseModel, Field
class WeatherDataIn(BaseModel):
"""Payload accepted by POST /stations/{station_name}/observations.
station_name is taken from the URL path, not the request body.
"""
temperature: float | None = Field(None, description="Temperature in Celsius")
pressure: float | None = Field(None, description="Atmospheric pressure in hPa")
relative_humidity: float | None = Field(
None, description="Relative humidity in percent (0-100)"
)
class WeatherRecordOut(BaseModel):
"""A single observation record (includes server-assigned fields)."""
id: int
station_name: str
temperature: float | None
pressure: float | None
relative_humidity: float | None
received_at: datetime
class ObservationListResponse(BaseModel):
"""Response for GET /stations/{station_name}/observations."""
station_name: str
count: int
records: list[WeatherRecordOut]
class StationInfo(BaseModel):
"""Summary of a known weather station."""
name: str
observation_count: int
latest_observation_at: datetime | None
class StationListResponse(BaseModel):
"""Response for GET /stations."""
stations: list[StationInfo]
count: int