WetterstationServer/models/measurement.py
2026-06-28 16:55:51 +02:00

60 lines
1.7 KiB
Python

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]