""" Script di Migrazione: Inizializzazione tabella schema_version Eseguire UNA VOLTA per aggiungere tracking versione schema al database esistente. Author: MediaTrack Team Date: 2025-10-30 """ import sqlite3 from pathlib import Path # Path al database DB_PATH = Path(__file__).parent / 'database' / 'mediatrack.db' def initialize_schema_version(): """ Crea tabella schema_version e inserisce storico migrazioni. """ print("="*70) print("INIZIALIZZAZIONE SCHEMA VERSION TABLE") print("="*70) print() if not DB_PATH.exists(): print(f"[ERROR] Database non trovato: {DB_PATH}") return False try: con = sqlite3.connect(str(DB_PATH)) cur = con.cursor() # Verifica se tabella esiste già cur.execute(""" SELECT name FROM sqlite_master WHERE type='table' AND name='schema_version' """) if cur.fetchone(): print("[INFO] Tabella schema_version già esiste") # Mostra versioni esistenti cur.execute("SELECT version, applied_at, description FROM schema_version ORDER BY version") rows = cur.fetchall() if rows: print("\n[INFO] Versioni schema esistenti:") for version, applied_at, description in rows: print(f" v{version}: {description} ({applied_at})") con.close() return True # Crea tabella print("[STEP 1/2] Creazione tabella schema_version...") cur.execute(""" CREATE TABLE schema_version ( version INTEGER PRIMARY KEY, applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, description TEXT ) """) print(" [OK] Tabella creata") # Inserisci storico migrazioni print("\n[STEP 2/2] Inserimento storico migrazioni...") cur.execute(""" INSERT INTO schema_version (version, applied_at, description) VALUES (1, '2025-09-01 10:00:00', 'Schema iniziale MediaTrack'), (2, '2025-10-15 14:00:00', 'Aggiunta privacy eventi (user_id, is_private)'), (3, '2025-10-22 18:09:00', 'Migrazione V11 - Gemma unica fonte distributori') """) print(" [OK] Inserite 3 versioni schema") # Commit con.commit() # Verifica cur.execute("SELECT MAX(version) FROM schema_version") current_version = cur.fetchone()[0] print() print("="*70) print("[SUCCESS] MIGRAZIONE COMPLETATA!") print(f" Versione schema corrente: v{current_version}") print("="*70) print() print("I backup futuri includeranno automaticamente la versione schema nel filename.") print(f"Esempio: mediatrack_manual_v{current_version}_nota_20251030_143052.db") print() con.close() return True except Exception as e: print(f"\n[ERROR] Errore durante migrazione: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": success = initialize_schema_version() if success: print("[INFO] Puoi ora utilizzare il sistema di backup/restore con verifica compatibilita") else: print("[ERROR] Migrazione fallita. Controlla gli errori sopra.") input("\nPremi INVIO per chiudere...")