app backend prima
This commit is contained in:
0
app/schemas/__init__.py
Normal file
0
app/schemas/__init__.py
Normal file
56
app/schemas/allarme.py
Normal file
56
app/schemas/allarme.py
Normal file
@@ -0,0 +1,56 @@
|
||||
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
|
||||
25
app/schemas/auth.py
Normal file
25
app/schemas/auth.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, EmailStr
|
||||
|
||||
|
||||
class Token(BaseModel):
|
||||
"""Schema per token JWT"""
|
||||
access_token: str
|
||||
token_type: str = "bearer"
|
||||
|
||||
|
||||
class TokenData(BaseModel):
|
||||
"""Schema per dati contenuti nel token"""
|
||||
email: Optional[str] = None
|
||||
cliente_id: Optional[int] = None
|
||||
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
"""Schema per richiesta di login"""
|
||||
email: EmailStr
|
||||
password: str
|
||||
|
||||
|
||||
class RegisterFCMToken(BaseModel):
|
||||
"""Schema per registrazione FCM token"""
|
||||
fcm_token: str
|
||||
36
app/schemas/sito.py
Normal file
36
app/schemas/sito.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel
|
||||
|
||||
from app.models.sito import TipoSito
|
||||
|
||||
|
||||
class SitoBase(BaseModel):
|
||||
"""Schema base per siti"""
|
||||
nome: str
|
||||
tipo: TipoSito
|
||||
descrizione: Optional[str] = None
|
||||
latitudine: Optional[float] = None
|
||||
longitudine: Optional[float] = None
|
||||
altitudine: Optional[float] = None
|
||||
comune: Optional[str] = None
|
||||
provincia: Optional[str] = None
|
||||
regione: Optional[str] = None
|
||||
codice_identificativo: Optional[str] = None
|
||||
|
||||
|
||||
class SitoResponse(SitoBase):
|
||||
"""Schema per risposta API con sito"""
|
||||
id: int
|
||||
cliente_id: int
|
||||
created_at: datetime
|
||||
updated_at: Optional[datetime] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class SitoListResponse(BaseModel):
|
||||
"""Schema per lista siti"""
|
||||
total: int
|
||||
items: list[SitoResponse]
|
||||
39
app/schemas/statistiche.py
Normal file
39
app/schemas/statistiche.py
Normal file
@@ -0,0 +1,39 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import List
|
||||
|
||||
|
||||
class StatisticheResponse(BaseModel):
|
||||
"""Schema per statistiche dashboard"""
|
||||
totale_allarmi: int
|
||||
totale_siti: int
|
||||
allarmi_aperti: int
|
||||
allarmi_recenti_7gg: int
|
||||
|
||||
# Per severità
|
||||
allarmi_critical: int
|
||||
allarmi_warning: int
|
||||
allarmi_info: int
|
||||
|
||||
# Per stato
|
||||
allarmi_nuovo: int
|
||||
allarmi_in_gestione: int
|
||||
allarmi_risolto: int
|
||||
|
||||
# Siti per tipo
|
||||
siti_ponte: int
|
||||
siti_galleria: int
|
||||
siti_diga: int
|
||||
siti_frana: int
|
||||
siti_versante: int
|
||||
siti_edificio: int
|
||||
|
||||
|
||||
class AllarmePerGiornoItem(BaseModel):
|
||||
"""Item per grafico allarmi per giorno"""
|
||||
data: str # ISO format date
|
||||
count: int
|
||||
|
||||
|
||||
class AllarmiPerGiornoResponse(BaseModel):
|
||||
"""Schema per allarmi raggruppati per giorno"""
|
||||
dati: List[AllarmePerGiornoItem]
|
||||
Reference in New Issue
Block a user