Ajoute le resume instantane de consommation du parc attendu par le frontend (deja developpe contre ce contrat en mode mock). Nouveaux SiteRepository et ReadingRepository (derniere lecture par site via DISTINCT ON), StatsService pour l'agregation et les cas de repli (capacite nulle, absence de lecture, data_quality inconnue), et le endpoint lecteur-seul correspondant. Documentation des routes et du schema des couches mises a jour.
27 lines
663 B
Python
27 lines
663 B
Python
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class SiteSummaryResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
site_id: str
|
|
site_name: str
|
|
current_consumption_kw: float | None
|
|
capacity_kw: float
|
|
load_percent: float | None
|
|
data_quality: Literal["good", "partial", "degraded", "critical"]
|
|
|
|
|
|
class StatsSummaryResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
timestamp: datetime
|
|
total_sites: int
|
|
total_consumption_kw: float
|
|
total_capacity_kw: float
|
|
average_load_percent: float
|
|
sites: list[SiteSummaryResponse]
|