100 lines
2.6 KiB
Python
100 lines
2.6 KiB
Python
"""
|
|
Migration script to add deployment tracking fields to generated_content table
|
|
Story 4.1: Deploy Content to Cloud Storage
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
|
|
from src.database.session import db_manager
|
|
from sqlalchemy import text
|
|
|
|
|
|
def migrate():
|
|
"""Add deployment tracking fields to generated_content table"""
|
|
|
|
session = db_manager.get_session()
|
|
|
|
try:
|
|
print("Starting migration: Add deployment tracking fields...")
|
|
|
|
print(" Adding deployed_url column...")
|
|
session.execute(text("""
|
|
ALTER TABLE generated_content
|
|
ADD COLUMN deployed_url TEXT NULL
|
|
"""))
|
|
|
|
print(" Adding deployed_at column...")
|
|
session.execute(text("""
|
|
ALTER TABLE generated_content
|
|
ADD COLUMN deployed_at TIMESTAMP NULL
|
|
"""))
|
|
|
|
print(" Creating index on deployed_at...")
|
|
session.execute(text("""
|
|
CREATE INDEX idx_generated_content_deployed
|
|
ON generated_content(deployed_at)
|
|
"""))
|
|
|
|
session.commit()
|
|
|
|
print("Migration completed successfully!")
|
|
print("\nNew fields added:")
|
|
print(" - deployed_url (TEXT, nullable)")
|
|
print(" - deployed_at (TIMESTAMP, nullable, indexed)")
|
|
|
|
except Exception as e:
|
|
session.rollback()
|
|
print(f"Migration failed: {e}")
|
|
raise
|
|
|
|
finally:
|
|
session.close()
|
|
|
|
|
|
def rollback():
|
|
"""Rollback migration (remove deployment fields)"""
|
|
|
|
session = db_manager.get_session()
|
|
|
|
try:
|
|
print("Rolling back migration: Remove deployment tracking fields...")
|
|
|
|
print(" Dropping index...")
|
|
session.execute(text("""
|
|
DROP INDEX IF EXISTS idx_generated_content_deployed
|
|
"""))
|
|
|
|
print(" Removing deployed_at column...")
|
|
session.execute(text("""
|
|
ALTER TABLE generated_content
|
|
DROP COLUMN deployed_at
|
|
"""))
|
|
|
|
print(" Removing deployed_url column...")
|
|
session.execute(text("""
|
|
ALTER TABLE generated_content
|
|
DROP COLUMN deployed_url
|
|
"""))
|
|
|
|
session.commit()
|
|
|
|
print("Rollback completed successfully!")
|
|
|
|
except Exception as e:
|
|
session.rollback()
|
|
print(f"Rollback failed: {e}")
|
|
raise
|
|
|
|
finally:
|
|
session.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1 and sys.argv[1] == "rollback":
|
|
rollback()
|
|
else:
|
|
migrate()
|
|
|