"""Current SQLAlchemy schema baseline. Revision ID: 001 Revises: Create Date: 2026-06-21 This revision represents the current runtime schema defined by packages.adapters.sqlalchemy_impl.models. Existing staging databases should be stamped to this revision after compatibility verification; fresh databases can run this migration normally. """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "001" down_revision: Union[str, None] = None branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.create_table( "users", sa.Column("id", sa.String(length=36), nullable=False), sa.Column("email", sa.String(length=255), nullable=False), sa.Column("username", sa.String(length=100), nullable=True), sa.Column("display_name", sa.String(length=255), nullable=False), sa.Column("password_hash", sa.String(length=255), nullable=False), sa.Column("email_verified", sa.Boolean(), nullable=False), sa.Column("email_verification_token", sa.String(length=255), nullable=True), sa.Column("password_reset_token", sa.String(length=255), nullable=True), sa.Column("password_reset_expires_at", sa.DateTime(), nullable=True), sa.Column("last_login_at", sa.DateTime(), nullable=True), sa.Column("last_login_ip", sa.String(length=50), nullable=True), sa.Column("created_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_users_email"), "users", ["email"], unique=True) op.create_index(op.f("ix_users_username"), "users", ["username"], unique=True) op.create_table( "projects", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("name", sa.String(length=100), nullable=False), sa.Column("description", sa.Text(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_projects_workspace_id"), "projects", ["workspace_id"], unique=False) op.create_table( "asset_libraries", sa.Column("id", sa.String(length=36), nullable=False), sa.Column("workspace_id", sa.String(length=36), nullable=False), sa.Column("project_id", sa.String(length=36), nullable=True), sa.Column("name", sa.String(length=255), nullable=False), sa.Column("kind", sa.String(length=20), nullable=False), sa.Column("asset_count", sa.Float(), nullable=False), sa.Column("total_size", sa.Float(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_asset_libraries_kind"), "asset_libraries", ["kind"], unique=False) op.create_index( op.f("ix_asset_libraries_project_id"), "asset_libraries", ["project_id"], unique=False, ) op.create_index( op.f("ix_asset_libraries_workspace_id"), "asset_libraries", ["workspace_id"], unique=False, ) op.create_table( "assets", sa.Column("id", sa.String(length=36), nullable=False), sa.Column("workspace_id", sa.String(length=36), nullable=False), sa.Column("project_id", sa.String(length=36), nullable=False), sa.Column("asset_library_id", sa.String(length=36), nullable=False), sa.Column("name", sa.String(length=500), nullable=False), sa.Column("file_type", sa.String(length=20), nullable=False), sa.Column("file_size", sa.Float(), nullable=False), sa.Column("file_url", sa.String(length=1000), nullable=False), sa.Column("thumbnail_url", sa.String(length=1000), nullable=True), sa.Column("duration", sa.Float(), nullable=True), sa.Column("width", sa.Float(), nullable=True), sa.Column("height", sa.Float(), nullable=True), sa.Column("fps", sa.Float(), nullable=True), sa.Column("codec", sa.String(length=50), nullable=True), sa.Column("status", sa.String(length=20), nullable=False), sa.Column("classification_status", sa.String(length=20), nullable=False), sa.Column("classification_result", sa.Text(), nullable=True), sa.Column("quality_score", sa.Float(), nullable=True), sa.Column("uploaded_by_user_id", sa.String(length=36), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_assets_asset_library_id"), "assets", ["asset_library_id"], unique=False) op.create_index( op.f("ix_assets_classification_status"), "assets", ["classification_status"], unique=False, ) op.create_index(op.f("ix_assets_created_at"), "assets", ["created_at"], unique=False) op.create_index(op.f("ix_assets_file_type"), "assets", ["file_type"], unique=False) op.create_index(op.f("ix_assets_project_id"), "assets", ["project_id"], unique=False) op.create_index(op.f("ix_assets_status"), "assets", ["status"], unique=False) op.create_index(op.f("ix_assets_workspace_id"), "assets", ["workspace_id"], unique=False) op.create_table( "ingest_jobs", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("library_id", sa.String(length=32), nullable=False), sa.Column("storage_key", sa.String(length=255), nullable=False), sa.Column("status", sa.String(length=20), nullable=False), sa.Column("error_message", sa.Text(), nullable=False), sa.Column("result_asset_id", sa.String(length=32), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_ingest_jobs_library_id"), "ingest_jobs", ["library_id"], unique=False) op.create_index(op.f("ix_ingest_jobs_project_id"), "ingest_jobs", ["project_id"], unique=False) op.create_index( op.f("ix_ingest_jobs_workspace_id"), "ingest_jobs", ["workspace_id"], unique=False, ) op.create_table( "classification_jobs", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("asset_id", sa.String(length=32), nullable=False), sa.Column("status", sa.String(length=20), nullable=False), sa.Column("classification", sa.String(length=50), nullable=False), sa.Column("confidence", sa.Float(), nullable=False), sa.Column("error_message", sa.Text(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index( op.f("ix_classification_jobs_asset_id"), "classification_jobs", ["asset_id"], unique=False, ) op.create_index( op.f("ix_classification_jobs_project_id"), "classification_jobs", ["project_id"], unique=False, ) op.create_index( op.f("ix_classification_jobs_workspace_id"), "classification_jobs", ["workspace_id"], unique=False, ) op.create_table( "generation_tasks", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("strategy_id", sa.String(length=32), nullable=False), sa.Column("asset_library_id", sa.String(length=32), nullable=False), sa.Column("voice_library_id", sa.String(length=32), nullable=False), sa.Column("status", sa.String(length=20), nullable=False), sa.Column("progress", sa.Float(), nullable=False), sa.Column("result_count", sa.Float(), nullable=False), sa.Column("error_message", sa.Text(), nullable=False), sa.Column("started_at", sa.DateTime(), nullable=True), sa.Column("completed_at", sa.DateTime(), nullable=True), sa.Column("created_by_user_id", sa.String(length=32), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index( op.f("ix_generation_tasks_asset_library_id"), "generation_tasks", ["asset_library_id"], unique=False, ) op.create_index( op.f("ix_generation_tasks_project_id"), "generation_tasks", ["project_id"], unique=False, ) op.create_index(op.f("ix_generation_tasks_status"), "generation_tasks", ["status"], unique=False) op.create_index( op.f("ix_generation_tasks_workspace_id"), "generation_tasks", ["workspace_id"], unique=False, ) op.create_table( "generated_videos", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("generation_task_id", sa.String(length=32), nullable=False), sa.Column("name", sa.String(length=255), nullable=False), sa.Column("file_url", sa.String(length=1000), nullable=False), sa.Column("file_size", sa.Float(), nullable=False), sa.Column("duration", sa.Float(), nullable=False), sa.Column("thumbnail_url", sa.String(length=1000), nullable=True), sa.Column("width", sa.Float(), nullable=False), sa.Column("height", sa.Float(), nullable=False), sa.Column("fps", sa.Float(), nullable=False), sa.Column("generated_at", sa.DateTime(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index( op.f("ix_generated_videos_generation_task_id"), "generated_videos", ["generation_task_id"], unique=False, ) op.create_index( op.f("ix_generated_videos_project_id"), "generated_videos", ["project_id"], unique=False, ) op.create_index( op.f("ix_generated_videos_workspace_id"), "generated_videos", ["workspace_id"], unique=False, ) op.create_table( "tasks", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("name", sa.String(length=200), nullable=False), sa.Column("description", sa.Text(), nullable=False), sa.Column("status", sa.String(length=20), nullable=False), sa.Column("priority", sa.String(length=20), nullable=False), sa.Column("parent_task_id", sa.String(length=32), nullable=False), sa.Column("assignee_user_id", sa.String(length=32), nullable=False), sa.Column("progress", sa.Float(), nullable=False), sa.Column("planned_start_date", sa.DateTime(), nullable=True), sa.Column("planned_end_date", sa.DateTime(), nullable=True), sa.Column("actual_start_date", sa.DateTime(), nullable=True), sa.Column("actual_end_date", sa.DateTime(), nullable=True), sa.Column("tags_json", sa.Text(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_tasks_parent_task_id"), "tasks", ["parent_task_id"], unique=False) op.create_index(op.f("ix_tasks_project_id"), "tasks", ["project_id"], unique=False) op.create_index(op.f("ix_tasks_status"), "tasks", ["status"], unique=False) op.create_index(op.f("ix_tasks_workspace_id"), "tasks", ["workspace_id"], unique=False) op.create_table( "milestones", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("name", sa.String(length=200), nullable=False), sa.Column("description", sa.Text(), nullable=False), sa.Column("target_date", sa.DateTime(), nullable=True), sa.Column("completed", sa.Boolean(), nullable=False), sa.Column("completed_at", sa.DateTime(), nullable=True), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_milestones_project_id"), "milestones", ["project_id"], unique=False) op.create_index(op.f("ix_milestones_workspace_id"), "milestones", ["workspace_id"], unique=False) op.create_table( "task_issues", sa.Column("id", sa.String(length=32), nullable=False), sa.Column("task_id", sa.String(length=32), nullable=False), sa.Column("project_id", sa.String(length=32), nullable=False), sa.Column("workspace_id", sa.String(length=32), nullable=False), sa.Column("title", sa.String(length=200), nullable=False), sa.Column("description", sa.Text(), nullable=False), sa.Column("resolved", sa.Boolean(), nullable=False), sa.Column("resolved_at", sa.DateTime(), nullable=True), sa.Column("created_by_user_id", sa.String(length=32), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False), sa.Column("updated_at", sa.DateTime(), nullable=False), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_task_issues_project_id"), "task_issues", ["project_id"], unique=False) op.create_index(op.f("ix_task_issues_task_id"), "task_issues", ["task_id"], unique=False) op.create_index( op.f("ix_task_issues_workspace_id"), "task_issues", ["workspace_id"], unique=False, ) def downgrade() -> None: op.drop_table("task_issues") op.drop_table("milestones") op.drop_table("tasks") op.drop_table("generated_videos") op.drop_table("generation_tasks") op.drop_table("classification_jobs") op.drop_table("ingest_jobs") op.drop_table("assets") op.drop_table("asset_libraries") op.drop_table("projects") op.drop_table("users")