80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
"""
|
|
Migration: Add deployment_records table.
|
|
|
|
Tracks each time a unit is sent to the field and returned.
|
|
The active deployment is the row with actual_removal_date IS NULL.
|
|
|
|
Run once per database:
|
|
python backend/migrate_add_deployment_records.py
|
|
"""
|
|
|
|
import sqlite3
|
|
import os
|
|
|
|
DB_PATH = "./data/seismo_fleet.db"
|
|
|
|
|
|
def migrate_database():
|
|
if not os.path.exists(DB_PATH):
|
|
print(f"Database not found at {DB_PATH}")
|
|
return
|
|
|
|
conn = sqlite3.connect(DB_PATH)
|
|
cursor = conn.cursor()
|
|
|
|
try:
|
|
# Check if table already exists
|
|
cursor.execute("""
|
|
SELECT name FROM sqlite_master
|
|
WHERE type='table' AND name='deployment_records'
|
|
""")
|
|
if cursor.fetchone():
|
|
print("✓ deployment_records table already exists, skipping")
|
|
return
|
|
|
|
print("Creating deployment_records table...")
|
|
cursor.execute("""
|
|
CREATE TABLE deployment_records (
|
|
id TEXT PRIMARY KEY,
|
|
unit_id TEXT NOT NULL,
|
|
deployed_date DATE,
|
|
estimated_removal_date DATE,
|
|
actual_removal_date DATE,
|
|
project_ref TEXT,
|
|
project_id TEXT,
|
|
location_name TEXT,
|
|
notes TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
""")
|
|
|
|
cursor.execute("""
|
|
CREATE INDEX idx_deployment_records_unit_id
|
|
ON deployment_records(unit_id)
|
|
""")
|
|
cursor.execute("""
|
|
CREATE INDEX idx_deployment_records_project_id
|
|
ON deployment_records(project_id)
|
|
""")
|
|
# Index for finding active deployments quickly
|
|
cursor.execute("""
|
|
CREATE INDEX idx_deployment_records_active
|
|
ON deployment_records(unit_id, actual_removal_date)
|
|
""")
|
|
|
|
conn.commit()
|
|
print("✓ deployment_records table created successfully")
|
|
print("✓ Indexes created")
|
|
|
|
except Exception as e:
|
|
conn.rollback()
|
|
print(f"✗ Migration failed: {e}")
|
|
raise
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
migrate_database()
|