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")