"""Create the media asset table required by admin uploads.""" from alembic import context, op import sqlalchemy as sa from sqlalchemy import inspect from app.migration_compat import baseline_table_names revision = "0034_media_assets" down_revision = "0033_remove_site_versions" branch_labels = None depends_on = None DEFAULT_DEPT_ID = "00000000-0000-0000-0000-000000000001" def is_offline_mode() -> bool: try: return context.is_offline_mode() except (NameError, AttributeError): return False def _table_names() -> set[str]: if is_offline_mode(): return baseline_table_names() return set(inspect(op.get_bind()).get_table_names()) def upgrade() -> None: if "MediaAsset" in _table_names(): return op.create_table( "MediaAsset", sa.Column("id", sa.String(), nullable=False), sa.Column("url", sa.String(), nullable=False, unique=True), sa.Column("name", sa.String(), nullable=True), sa.Column("mimeType", sa.String(), nullable=True), sa.Column("sizeBytes", sa.Integer(), nullable=True), sa.Column("group", sa.String(), nullable=True), sa.Column( "deptId", sa.String(), nullable=False, server_default=sa.text(f"'{DEFAULT_DEPT_ID}'"), ), sa.Column("createdById", sa.String(), nullable=True), sa.Column("createdAt", sa.DateTime(), nullable=False), sa.Column("updatedAt", sa.DateTime(), nullable=False), sa.ForeignKeyConstraint( ["deptId"], ["AdminDepartment.id"], name="fk_MediaAsset_deptId", ondelete="RESTRICT", ), sa.ForeignKeyConstraint( ["createdById"], ["AdminUser.id"], name="fk_MediaAsset_createdById", ondelete="SET NULL", ), sa.PrimaryKeyConstraint("id"), ) op.create_index("ix_MediaAsset_deptId", "MediaAsset", ["deptId"]) op.create_index("ix_MediaAsset_createdById", "MediaAsset", ["createdById"]) def downgrade() -> None: if "MediaAsset" not in _table_names(): return op.drop_index("ix_MediaAsset_createdById", table_name="MediaAsset") op.drop_index("ix_MediaAsset_deptId", table_name="MediaAsset") op.drop_table("MediaAsset")