from datetime import datetime from typing import Optional, Dict, Any from pydantic import BaseModel, Field from app.models.allarme import SeveritaAllarme, StatoAllarme, TipoAllarme class AllarmeBase(BaseModel): """Schema base per allarmi""" tipo: TipoAllarme severita: SeveritaAllarme titolo: str = Field(..., max_length=255) descrizione: Optional[str] = None messaggio: Optional[str] = None valore_rilevato: Optional[float] = None valore_soglia: Optional[float] = None unita_misura: Optional[str] = Field(None, max_length=20) dati_sensori: Optional[Dict[str, Any]] = None class AllarmeCreate(AllarmeBase): """Schema per creazione allarme""" sito_id: int timestamp_rilevamento: datetime class AllarmeUpdate(BaseModel): """Schema per aggiornamento allarme""" stato: Optional[StatoAllarme] = None note: Optional[str] = None risolto_da: Optional[str] = None class AllarmeResponse(AllarmeBase): """Schema per risposta API con allarme""" id: int sito_id: int stato: StatoAllarme timestamp_rilevamento: datetime timestamp_notifica: Optional[datetime] = None created_at: datetime updated_at: Optional[datetime] = None note: Optional[str] = None risolto_da: Optional[str] = None timestamp_risoluzione: Optional[datetime] = None class Config: from_attributes = True class AllarmeList(BaseModel): """Schema per lista paginata di allarmi""" total: int items: list[AllarmeResponse] page: int page_size: int