Init Repo
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
"""
|
||||
Migration script to add custom_task_statuses column to projects table
|
||||
and convert task status from enum to string.
|
||||
"""
|
||||
import sqlite3
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
# Database path
|
||||
DB_PATH = Path(__file__).parent / "vfx_project_management.db"
|
||||
|
||||
|
||||
def migrate_database():
|
||||
"""Add custom_task_statuses column and migrate task status to string"""
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
print("Starting migration for custom task statuses...")
|
||||
|
||||
# Check if column already exists in projects table
|
||||
cursor.execute("PRAGMA table_info(projects)")
|
||||
columns = [col[1] for col in cursor.fetchall()]
|
||||
|
||||
# Add custom_task_statuses column if it doesn't exist
|
||||
if 'custom_task_statuses' not in columns:
|
||||
print("Adding custom_task_statuses column to projects table...")
|
||||
cursor.execute("""
|
||||
ALTER TABLE projects
|
||||
ADD COLUMN custom_task_statuses TEXT
|
||||
""")
|
||||
# Initialize with empty arrays
|
||||
cursor.execute("""
|
||||
UPDATE projects
|
||||
SET custom_task_statuses = '[]'
|
||||
WHERE custom_task_statuses IS NULL
|
||||
""")
|
||||
print("✓ Added custom_task_statuses column")
|
||||
else:
|
||||
print("✓ custom_task_statuses column already exists")
|
||||
|
||||
# Note: SQLite doesn't support changing column types directly
|
||||
# The status column in tasks table will remain as TEXT in the database
|
||||
# The Enum constraint was only enforced at the application level
|
||||
print("✓ Task status column already supports string values")
|
||||
|
||||
# Verify existing task statuses and convert uppercase to lowercase
|
||||
cursor.execute("SELECT DISTINCT status FROM tasks")
|
||||
existing_statuses = [row[0] for row in cursor.fetchall()]
|
||||
print(f"✓ Existing task statuses in database: {existing_statuses}")
|
||||
|
||||
# Convert uppercase enum values to lowercase string values
|
||||
status_mapping = {
|
||||
'NOT_STARTED': 'not_started',
|
||||
'IN_PROGRESS': 'in_progress',
|
||||
'SUBMITTED': 'submitted',
|
||||
'APPROVED': 'approved',
|
||||
'RETAKE': 'retake'
|
||||
}
|
||||
|
||||
for old_status, new_status in status_mapping.items():
|
||||
cursor.execute(
|
||||
"UPDATE tasks SET status = ? WHERE status = ?",
|
||||
(new_status, old_status)
|
||||
)
|
||||
updated_count = cursor.rowcount
|
||||
if updated_count > 0:
|
||||
print(f"✓ Converted {updated_count} tasks from '{old_status}' to '{new_status}'")
|
||||
|
||||
# Verify conversion
|
||||
cursor.execute("SELECT DISTINCT status FROM tasks")
|
||||
updated_statuses = [row[0] for row in cursor.fetchall()]
|
||||
print(f"✓ Updated task statuses in database: {updated_statuses}")
|
||||
|
||||
conn.commit()
|
||||
print("\n✅ Migration completed successfully!")
|
||||
print("\nNext steps:")
|
||||
print("1. System statuses remain available: not_started, in_progress, submitted, approved, retake")
|
||||
print("2. Projects can now define custom statuses via the custom_task_statuses JSON column")
|
||||
print("3. Tasks can use both system and custom status values")
|
||||
|
||||
except Exception as e:
|
||||
conn.rollback()
|
||||
print(f"\n❌ Migration failed: {e}")
|
||||
raise
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
migrate_database()
|
||||
Reference in New Issue
Block a user