Ajoute la dernière mesure d'un site (SiteService.current), en réutilisant
la vérification d'existence déjà en place pour GET /sites/{site_id} :
SiteService gagne une dépendance ReadingRepository, sur le modèle de
composition déjà utilisé par StatsService/SensorService. Un site connu
sans lecture rend 200 avec les champs de mesure à null et
data_quality="critical" ; seul un site_id absent rend 404.
33 lines
804 B
Python
33 lines
804 B
Python
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class SiteResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
site_id: str
|
|
site_name: str
|
|
site_type: str
|
|
location: str | None
|
|
capacity_kw: float | None
|
|
status: str | None
|
|
|
|
|
|
class SiteCurrentResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
timestamp: datetime | None
|
|
site_id: str
|
|
site_type: str
|
|
consumption_kw: float | None
|
|
consumption_kwh: float | None
|
|
voltage_v: float | None
|
|
current_a: float | None
|
|
power_factor: float | None
|
|
temperature_celsius: float | None
|
|
humidity_percent: float | None
|
|
null_reasons: list[str]
|
|
data_quality: Literal["good", "partial", "degraded", "critical"]
|