50 lines
1.4 KiB
Python
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")
|