Files
delphi-database/scripts/create_workflow_tables.py
HotSwapp bac8cc4bd5 changes
2025-08-18 20:20:04 -05:00

110 lines
3.5 KiB
Python

#!/usr/bin/env python3
"""
Script to create workflow tables in the database
This adds the document workflow system tables to an existing database
"""
import sys
import os
# Add the project root to Python path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from sqlalchemy import text
from app.database.base import engine
from app.models.document_workflows import (
DocumentWorkflow, WorkflowAction, WorkflowExecution,
EventLog, WorkflowTemplate, WorkflowSchedule
)
from app.models.deadlines import (
Deadline, DeadlineReminder, DeadlineTemplate, DeadlineHistory, CourtCalendar
)
from app.models.base import BaseModel
def table_exists(engine, table_name: str) -> bool:
"""Check if a table exists in the database"""
with engine.begin() as conn:
try:
result = conn.execute(text(f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}'"))
return result.fetchone() is not None
except Exception:
return False
def create_workflow_tables():
"""Create workflow and deadline tables if they don't exist"""
print("🚀 Creating Workflow and Deadline Tables for Delphi Database")
print("=" * 60)
# List of workflow and deadline table models
all_tables = [
# Workflow tables
("document_workflows", DocumentWorkflow),
("workflow_actions", WorkflowAction),
("workflow_executions", WorkflowExecution),
("event_log", EventLog),
("workflow_templates", WorkflowTemplate),
("workflow_schedules", WorkflowSchedule),
# Deadline tables
("deadlines", Deadline),
("deadline_reminders", DeadlineReminder),
("deadline_templates", DeadlineTemplate),
("deadline_history", DeadlineHistory),
("court_calendar", CourtCalendar),
]
existing_tables = []
new_tables = []
# Check which tables already exist
for table_name, table_model in all_tables:
if table_exists(engine, table_name):
existing_tables.append(table_name)
print(f"✅ Table '{table_name}' already exists")
else:
new_tables.append((table_name, table_model))
print(f"📝 Table '{table_name}' needs to be created")
if not new_tables:
print("\n🎉 All workflow and deadline tables already exist!")
return True
print(f"\n🔨 Creating {len(new_tables)} new tables...")
try:
# Create the new tables
for table_name, table_model in new_tables:
print(f" Creating {table_name}...")
table_model.__table__.create(engine, checkfirst=True)
print(f" ✅ Created {table_name}")
print(f"\n🎉 Successfully created {len(new_tables)} workflow and deadline tables!")
print("\nWorkflow and deadline systems are now ready to use.")
return True
except Exception as e:
print(f"\n❌ Error creating workflow tables: {str(e)}")
return False
def main():
"""Main function"""
success = create_workflow_tables()
if success:
print("\n✨ Next steps:")
print("1. Run 'python3 scripts/setup_example_workflows.py' to create example workflows")
print("2. Test the workflows with 'python3 scripts/test_workflows.py'")
print("3. Configure email settings for deadline reminders")
else:
print("\n🔧 Please check the error messages above and try again.")
return success
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)