LinkDesk/backend/create_fresh_database.py

132 lines
4.6 KiB
Python

#!/usr/bin/env python3
"""
Create a fresh database with proper schema and test data.
"""
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
def create_fresh_database():
"""Create a fresh database with proper schema."""
print("Creating Fresh Database")
print("=" * 30)
# Use a new database name
new_db_name = "vfx_project_fresh.db"
# Remove if exists
if os.path.exists(new_db_name):
os.remove(new_db_name)
print(f"Removed existing {new_db_name}")
# Update database configuration temporarily
os.environ['DATABASE_URL'] = f"sqlite:///./{new_db_name}"
try:
# Import after setting environment variable
from database import engine, Base
import models # This imports all models
# Create all tables
Base.metadata.create_all(bind=engine)
print("✅ Created database schema")
# Create admin user
from database import get_db
from models.user import User, UserRole
from utils.auth import get_password_hash
db = next(get_db())
# Check if admin exists
admin_user = db.query(User).filter(User.email == "admin@vfx.com").first()
if not admin_user:
admin_user = User(
email="admin@vfx.com",
password_hash=get_password_hash("admin123"),
first_name="Admin",
last_name="User",
role=UserRole.COORDINATOR,
is_admin=True,
is_approved=True
)
db.add(admin_user)
db.commit()
print("✅ Created admin user")
else:
print("✅ Admin user already exists")
# Create test projects
from models.project import Project, ProjectStatus, ProjectType
import json
from datetime import datetime
# Project 1
project1 = Project(
name="Test VFX Project",
code_name="TEST_VFX_001",
client_name="Test Studio",
project_type=ProjectType.CINEMA,
description="Test project for VFX management system",
status=ProjectStatus.PLANNING,
frame_rate=24.0,
data_drive_path="/projects/test_vfx/data",
publish_storage_path="/projects/test_vfx/publish",
delivery_image_resolution="1920x1080",
delivery_movie_specs_by_department=json.dumps({
"layout": {"resolution": "1920x1080", "format": "mov", "codec": "h264", "quality": "medium"},
"animation": {"resolution": "1920x1080", "format": "mov", "codec": "h264", "quality": "high"}
})
)
# Project 2
project2 = Project(
name="Dragon Quest: The Awakening",
code_name="DRAGON_QUEST_2024",
client_name="Epic Fantasy Studios",
project_type=ProjectType.CINEMA,
description="A high-budget fantasy film featuring dragons and magic",
status=ProjectStatus.IN_PROGRESS,
frame_rate=24.0,
data_drive_path="/projects/dragon_quest_2024/data",
publish_storage_path="/projects/dragon_quest_2024/publish",
delivery_image_resolution="4096x2160",
delivery_movie_specs_by_department=json.dumps({
"layout": {"resolution": "1920x1080", "format": "mov", "codec": "h264", "quality": "medium"},
"animation": {"resolution": "2048x1080", "format": "mov", "codec": "h264", "quality": "high"},
"lighting": {"resolution": "4096x2160", "format": "exr", "codec": None, "quality": "high"},
"composite": {"resolution": "4096x2160", "format": "mov", "codec": "prores", "quality": "high"}
})
)
db.add(project1)
db.add(project2)
db.commit()
print("✅ Created test projects")
# Rename to replace old database
db.close()
# Now replace the old database
old_db = "vfx_project_management.db"
if os.path.exists(old_db):
os.remove(old_db)
os.rename(new_db_name, old_db)
print(f"✅ Replaced old database with fresh one")
print("\n🎉 Fresh database created successfully!")
print("Admin credentials: admin@vfx.com / admin123")
return True
except Exception as e:
print(f"❌ Error: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
create_fresh_database()