import sqlite3
import bcrypt
DATABASE_NAME = "database.db"
[documenti]
def get_connection():
"""Ritorna una connessione SQLite al file database.
db con Row factory."""
connection = sqlite3.connect(DATABASE_NAME)
connection.row_factory = sqlite3.Row
connection.execute("PRAGMA foreign_keys = ON;")
return connection
[documenti]
def seed_services():
"""Popola la tabella services con dati di default."""
services = [
{"name": "Camera Singola", "description": "Camera per una persona", "capacity": 1, "price": 50.0, "active": 1},
{"name": "Camera Doppia", "description": "Camera per due persone", "capacity": 2, "price": 100.0, "active": 1},
{"name": "Suite", "description": "Camera di lusso per due persone", "capacity": 2, "price": 200.0, "active": 1},
{"name": "Sala Riunioni", "description": "Sala riunioni per eventi aziendali", "capacity": 20, "price": 500.0, "active": 1},
]
with get_connection() as conn:
c = conn.cursor()
for service in services:
c.execute("""
INSERT OR IGNORE INTO services (name, description, capacity, price, active)
VALUES (?, ?, ?, ?, ?)
""", (service["name"], service["description"], service["capacity"], service["price"], service["active"]))
conn.commit()
print("Servizi di default inseriti.")
[documenti]
def seed_bookings():
"""Popola la tabella bookings con dati di default."""
bookings = [
{"user_id": 1, "service_id": 1, "start_date": "2025-10-01", "end_date": "2025-11-05", "status": "confirmed", "capacity_requested": 1, "total_price": 200.0},
{"user_id": 1, "service_id": 2, "start_date": "2025-10-01", "end_date": "2025-11-03", "status": "pending", "capacity_requested": 2, "total_price": 200.0},
]
with get_connection() as conn:
c = conn.cursor()
for booking in bookings:
c.execute("""
INSERT INTO bookings (user_id, service_id, start_date, end_date, status, capacity_requested, total_price)
VALUES (?, ?, ?, ?, ?, ?, ?)
""", (booking["user_id"], booking["service_id"], booking["start_date"], booking["end_date"], booking["status"], booking["capacity_requested"], booking["total_price"]))
conn.commit()
print("Prenotazioni di default inserite.")
[documenti]
def seed_users():
"""Popola la tabella users con utenti di default."""
import bcrypt
users = [
{"username": "mario", "password": bcrypt.hashpw("test".encode("utf-8"), bcrypt.gensalt()).decode("utf-8"), "email": "mario@example.com", "role": "user"},
{"username": "marco", "password": bcrypt.hashpw("test123".encode("utf-8"), bcrypt.gensalt()).decode("utf-8"), "email": "marco@example.com", "role": "user"},
]
with get_connection() as conn:
c = conn.cursor()
for user in users:
c.execute("""
INSERT OR IGNORE INTO users (username, password, email, role)
VALUES (?, ?, ?, ?)
""", (user["username"], user["password"], user["email"], user["role"]))
conn.commit()
print("Utenti di default inseriti.")
[documenti]
def seed_all():
"""Esegue tutti i seed di default."""
seed_services()
seed_users()
seed_bookings()
print("Database inizializzato con dati di default.")
[documenti]
def init_db():
"""Crea le tabelle bookings, users e sessions se non esistono."""
with get_connection() as conn:
c = conn.cursor()
# Creazione tabella services
c.execute("""
CREATE TABLE IF NOT EXISTS services (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
description TEXT,
capacity INTEGER,
price REAL,
active INTEGER NOT NULL DEFAULT 1
);
""")
# Creazione tabella bookings
c.execute("""
CREATE TABLE IF NOT EXISTS bookings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
service_id INTEGER NOT NULL,
start_date TEXT NOT NULL,
end_date TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
capacity_requested INTEGER NOT NULL DEFAULT 1,
total_price REAL DEFAULT 0.0,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (service_id) REFERENCES services(id)
);
""")
# Creazione tabella users
c.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
email TEXT UNIQUE,
role TEXT NOT NULL DEFAULT 'user' -- 'user' o 'admin'
);
""")
# Creazione tabella sessions
c.execute("""
CREATE TABLE IF NOT EXISTS sessions (
session_id TEXT PRIMARY KEY,
user_id INTEGER NOT NULL,
created_at TEXT NOT NULL,
expires_at TEXT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
""")
# Crea un amministratore di default se non esiste
c.execute("SELECT COUNT(*) as count FROM users WHERE role = 'admin'")
admin_count = c.fetchone()["count"]
if admin_count == 0:
default_admin_username = "admin"
default_admin_password = bcrypt.hashpw("admin".encode("utf-8"), bcrypt.gensalt()).decode("utf-8")
default_admin_email = "admin@example.com"
c.execute("""
INSERT INTO users (username, password, email, role)
VALUES (?, ?, ?, 'admin')
""", (default_admin_username, default_admin_password, default_admin_email))
print("Amministratore di default creato: username='admin', password='admin'")
print("Inizializzazione del resto delle tabelle...")
conn.commit()
seed_all()
print("Tabelle inizializzate")
else:
print("Tabelle giĆ inizializzate")
conn.commit()