from datetime import datetime, timezone from enum import Enum from typing import List from sqlmodel import SQLModel, Field from models.station import StationListResponse def utc_now() -> datetime: return datetime.now(timezone.utc) class MeasurementResolution(str, Enum): hourly = "hourly" daily = "daily" weekly = "weekly" monthly = "monthly" yearly = "yearly" class IndoorMeasurement(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) station_id: int = Field(foreign_key="station.id") timestamp: datetime = Field(default_factory=utc_now) temperature: float | None= Field(default=None) humidity: float| None = Field(default=None) class OutdoorMeasurement(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) station_id : int= Field(foreign_key="station.id") temperature: float| None = Field(default=None) humidity: float | None = Field(default=None) pressure: float| None = Field(default=None) timestamp: datetime = Field(default_factory=utc_now) class IndoorMeasurementCreateRequest(SQLModel): mac: str temperature: float humidity: float class OutdoorMeasurementCreateRequest(SQLModel): mac: str temperature: float humidity: float | None = None pressure: float | None = None class MeasurementResponse(SQLModel): temperature: float humidity: float | None = None pressure: float | None = None timestamp: datetime class StationMeasurementResponse(SQLModel): station: StationListResponse measurements: list[MeasurementResponse] indoor: bool class MeasurementListResponse(SQLModel): stations: list[StationMeasurementResponse]