79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
"""
|
|
Migration script to add unit history timeline support.
|
|
|
|
This creates the unit_history table to track all changes to units:
|
|
- Note changes (archived old notes, new notes)
|
|
- Deployment status changes (deployed/benched)
|
|
- Retired status changes
|
|
- Other field changes
|
|
|
|
Run this script once to migrate an existing database.
|
|
"""
|
|
|
|
import sqlite3
|
|
import os
|
|
|
|
# Database path
|
|
DB_PATH = "./data/seismo_fleet.db"
|
|
|
|
def migrate_database():
|
|
"""Create the unit_history table"""
|
|
|
|
if not os.path.exists(DB_PATH):
|
|
print(f"Database not found at {DB_PATH}")
|
|
print("The database will be created automatically when you run the application.")
|
|
return
|
|
|
|
print(f"Migrating database: {DB_PATH}")
|
|
|
|
conn = sqlite3.connect(DB_PATH)
|
|
cursor = conn.cursor()
|
|
|
|
# Check if unit_history table already exists
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='unit_history'")
|
|
if cursor.fetchone():
|
|
print("Migration already applied - unit_history table exists")
|
|
conn.close()
|
|
return
|
|
|
|
print("Creating unit_history table...")
|
|
|
|
try:
|
|
cursor.execute("""
|
|
CREATE TABLE unit_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
unit_id TEXT NOT NULL,
|
|
change_type TEXT NOT NULL,
|
|
field_name TEXT,
|
|
old_value TEXT,
|
|
new_value TEXT,
|
|
changed_at TIMESTAMP NOT NULL,
|
|
source TEXT DEFAULT 'manual',
|
|
notes TEXT
|
|
)
|
|
""")
|
|
print(" ✓ Created unit_history table")
|
|
|
|
# Create indexes for better query performance
|
|
cursor.execute("CREATE INDEX idx_unit_history_unit_id ON unit_history(unit_id)")
|
|
print(" ✓ Created index on unit_id")
|
|
|
|
cursor.execute("CREATE INDEX idx_unit_history_changed_at ON unit_history(changed_at)")
|
|
print(" ✓ Created index on changed_at")
|
|
|
|
conn.commit()
|
|
print("\nMigration completed successfully!")
|
|
print("Units will now track their complete history of changes.")
|
|
|
|
except sqlite3.Error as e:
|
|
print(f"\nError during migration: {e}")
|
|
conn.rollback()
|
|
raise
|
|
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
migrate_database()
|