Files
web-app-python/app/models/sito.py
2025-10-20 19:10:08 +02:00

50 lines
1.4 KiB
Python

from sqlalchemy import Column, Integer, String, DateTime, Float, ForeignKey, Enum as SQLEnum
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import enum
from app.core.database import Base
class TipoSito(str, enum.Enum):
"""Tipi di siti monitorati"""
FRANA = "frana"
GALLERIA = "galleria"
PONTE = "ponte"
DIGA = "diga"
VERSANTE = "versante"
EDIFICIO = "edificio"
ALTRO = "altro"
class Sito(Base):
"""Modello per i siti monitorati"""
__tablename__ = "siti"
id = Column(Integer, primary_key=True, index=True)
cliente_id = Column(Integer, ForeignKey("clienti.id"), nullable=False)
nome = Column(String(255), nullable=False)
tipo = Column(SQLEnum(TipoSito), nullable=False)
descrizione = Column(String(1000))
# Coordinate geografiche
latitudine = Column(Float)
longitudine = Column(Float)
altitudine = Column(Float)
# Indirizzo
indirizzo = Column(String(500))
comune = Column(String(100))
provincia = Column(String(2))
regione = Column(String(100))
# Metadata
codice_identificativo = Column(String(50), unique=True, index=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# Relazioni
cliente = relationship("Cliente", back_populates="siti")
allarmi = relationship("Allarme", back_populates="sito", cascade="all, delete-orphan")