57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
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
|