192 lines
6.2 KiB
Python
192 lines
6.2 KiB
Python
"""
|
|
Script per inizializzare il database con dati di esempio
|
|
"""
|
|
import sys
|
|
import os
|
|
|
|
# 1. Ottieni il percorso assoluto della directory corrente dello script
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# 2. Risali di un livello per raggiungere la directory radice (quella che contiene 'app' e 'scripts')
|
|
# Esempio: da /percorso/al/progetto/scripts a /percorso/al/progetto
|
|
project_root = os.path.join(current_dir, '..')
|
|
|
|
# 3. Aggiungi la directory radice al path di ricerca dei moduli di Python
|
|
sys.path.append(project_root)
|
|
|
|
# 4. Carica variabili d'ambiente dal file .env
|
|
from dotenv import load_dotenv
|
|
env_path = os.path.join(project_root, '.env')
|
|
load_dotenv(env_path)
|
|
|
|
from datetime import datetime, timezone
|
|
from app.core.database import SessionLocal, engine, Base
|
|
from app.models import Cliente, Sito, Utente, TipoSito, RuoloUtente
|
|
from app.core.security import get_password_hash
|
|
|
|
|
|
def init_database():
|
|
"""Crea le tabelle e inserisce dati di esempio"""
|
|
|
|
# Crea tutte le tabelle
|
|
print("Creazione tabelle...")
|
|
Base.metadata.create_all(bind=engine)
|
|
print("✓ Tabelle create")
|
|
|
|
db = SessionLocal()
|
|
|
|
try:
|
|
# Verifica se esistono già dati
|
|
existing_cliente = db.query(Cliente).first()
|
|
if existing_cliente:
|
|
print("⚠ Database già inizializzato. Skip.")
|
|
return
|
|
|
|
# 1. Crea cliente di esempio
|
|
print("\nCreazione cliente di esempio...")
|
|
cliente = Cliente(
|
|
nome="Azienda Monitoraggio SRL",
|
|
ragione_sociale="Azienda Monitoraggio SRL",
|
|
partita_iva="12345678901",
|
|
email="info@aziendamonitoraggio.it",
|
|
telefono="+39 02 1234567",
|
|
indirizzo="Via Roma 1, 20100 Milano",
|
|
attivo=True,
|
|
)
|
|
db.add(cliente)
|
|
db.flush()
|
|
print(f"✓ Cliente creato: {cliente.nome} (ID: {cliente.id})")
|
|
|
|
# 2. Crea siti di esempio
|
|
print("\nCreazione siti monitorati...")
|
|
siti = [
|
|
Sito(
|
|
cliente_id=cliente.id,
|
|
nome="Ponte Morandi",
|
|
tipo=TipoSito.PONTE,
|
|
descrizione="Ponte autostradale sulla A10",
|
|
latitudine=44.4268,
|
|
longitudine=8.9137,
|
|
comune="Genova",
|
|
provincia="GE",
|
|
regione="Liguria",
|
|
codice_identificativo="PON-001",
|
|
),
|
|
Sito(
|
|
cliente_id=cliente.id,
|
|
nome="Galleria San Boldo",
|
|
tipo=TipoSito.GALLERIA,
|
|
descrizione="Galleria stradale sul passo San Boldo",
|
|
latitudine=45.9811,
|
|
longitudine=12.1064,
|
|
comune="Cison di Valmarino",
|
|
provincia="TV",
|
|
regione="Veneto",
|
|
codice_identificativo="GAL-002",
|
|
),
|
|
Sito(
|
|
cliente_id=cliente.id,
|
|
nome="Diga del Vajont",
|
|
tipo=TipoSito.DIGA,
|
|
descrizione="Diga sul torrente Vajont",
|
|
latitudine=46.2691,
|
|
longitudine=12.3281,
|
|
comune="Erto e Casso",
|
|
provincia="PN",
|
|
regione="Friuli-Venezia Giulia",
|
|
codice_identificativo="DIG-003",
|
|
),
|
|
Sito(
|
|
cliente_id=cliente.id,
|
|
nome="Versante Cà di Sotto",
|
|
tipo=TipoSito.FRANA,
|
|
descrizione="Area soggetta a movimento franoso",
|
|
latitudine=44.3521,
|
|
longitudine=10.8464,
|
|
comune="Corniglio",
|
|
provincia="PR",
|
|
regione="Emilia-Romagna",
|
|
codice_identificativo="FRA-004",
|
|
),
|
|
]
|
|
|
|
for sito in siti:
|
|
db.add(sito)
|
|
print(f"✓ Sito creato: {sito.nome} ({sito.tipo})")
|
|
|
|
db.flush()
|
|
|
|
# 3. Crea utenti di esempio
|
|
print("\nCreazione utenti...")
|
|
utenti = [
|
|
Utente(
|
|
cliente_id=cliente.id,
|
|
email="admin@azienda.it",
|
|
password_hash=get_password_hash("admin123"),
|
|
nome="Mario",
|
|
cognome="Rossi",
|
|
telefono="+39 333 1234567",
|
|
ruolo=RuoloUtente.ADMIN,
|
|
attivo=True,
|
|
email_verificata=True,
|
|
),
|
|
Utente(
|
|
cliente_id=cliente.id,
|
|
email="operatore@azienda.it",
|
|
password_hash=get_password_hash("operatore123"),
|
|
nome="Luca",
|
|
cognome="Bianchi",
|
|
telefono="+39 333 7654321",
|
|
ruolo=RuoloUtente.OPERATORE,
|
|
attivo=True,
|
|
email_verificata=True,
|
|
),
|
|
Utente(
|
|
cliente_id=cliente.id,
|
|
email="viewer@azienda.it",
|
|
password_hash=get_password_hash("viewer123"),
|
|
nome="Anna",
|
|
cognome="Verdi",
|
|
telefono="+39 333 9876543",
|
|
ruolo=RuoloUtente.VISUALIZZATORE,
|
|
attivo=True,
|
|
email_verificata=True,
|
|
),
|
|
]
|
|
|
|
for utente in utenti:
|
|
db.add(utente)
|
|
print(f"✓ Utente creato: {utente.email} ({utente.ruolo})")
|
|
|
|
# Commit finale
|
|
db.commit()
|
|
|
|
print("\n" + "=" * 60)
|
|
print("✓ Database inizializzato con successo!")
|
|
print("=" * 60)
|
|
print("\nCredenziali di accesso:")
|
|
print("-" * 60)
|
|
for utente in utenti:
|
|
pwd = "admin123" if utente.ruolo == RuoloUtente.ADMIN else \
|
|
"operatore123" if utente.ruolo == RuoloUtente.OPERATORE else "viewer123"
|
|
print(f"Email: {utente.email:25} | Password: {pwd:15} | Ruolo: {utente.ruolo}")
|
|
print("-" * 60)
|
|
print(f"\nSiti monitorati creati: {len(siti)}")
|
|
for i, sito in enumerate(siti, 1):
|
|
print(f" {i}. {sito.nome} (ID: {sito.id}) - {sito.tipo}")
|
|
print()
|
|
|
|
except Exception as e:
|
|
print(f"\n✗ Errore durante l'inizializzazione: {e}")
|
|
db.rollback()
|
|
raise
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("=" * 60)
|
|
print("INIZIALIZZAZIONE DATABASE - Terrain Monitor")
|
|
print("=" * 60)
|
|
init_database()
|