"""add durable backup preflights and import ledger Revision ID: 0019_backup_imports Revises: 0018_task_completed_at """ import sqlalchemy as sa from alembic import op revision = "0019_backup_imports" down_revision = "0018_task_completed_at" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "backup_preflights", sa.Column("id", sa.Uuid(), nullable=False), sa.Column("token_hash", sa.String(length=64), nullable=False), sa.Column("user_id", sa.Uuid(), nullable=False), sa.Column("backup_id", sa.Uuid(), nullable=False), sa.Column("archive_sha256", sa.String(length=64), nullable=False), sa.Column("archive_size", sa.Integer(), nullable=False), sa.Column("staging_path", sa.String(length=1024), nullable=False), sa.Column("mode", sa.String(length=16), nullable=False), sa.Column("status", sa.String(length=32), nullable=False), sa.Column("expires_at", sa.DateTime(timezone=True), nullable=False), sa.Column("consumed_at", sa.DateTime(timezone=True), nullable=True), sa.Column("cleanup_path", sa.String(length=1024), nullable=True), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(["user_id"], ["users.id"], ondelete="CASCADE"), sa.PrimaryKeyConstraint("id"), sa.UniqueConstraint("staging_path"), sa.UniqueConstraint("token_hash"), ) op.create_index("ix_backup_preflights_user_id", "backup_preflights", ["user_id"]) op.create_index("ix_backup_preflights_backup_id", "backup_preflights", ["backup_id"]) op.create_index("ix_backup_preflights_status", "backup_preflights", ["status"]) op.create_index("ix_backup_preflights_expires_at", "backup_preflights", ["expires_at"]) op.create_table( "backup_imports", sa.Column("id", sa.Uuid(), nullable=False), sa.Column("user_id", sa.Uuid(), nullable=False), sa.Column("backup_id", sa.Uuid(), nullable=False), sa.Column("archive_sha256", sa.String(length=64), nullable=False), sa.Column("mode", sa.String(length=16), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(["user_id"], ["users.id"], ondelete="CASCADE"), sa.PrimaryKeyConstraint("id"), sa.UniqueConstraint("user_id", "backup_id", name="uq_backup_import_user_backup"), ) op.create_index("ix_backup_imports_user_id", "backup_imports", ["user_id"]) op.create_index("ix_backup_imports_backup_id", "backup_imports", ["backup_id"]) op.create_table( "backup_import_entities", sa.Column("id", sa.Uuid(), nullable=False), sa.Column("user_id", sa.Uuid(), nullable=False), sa.Column("backup_id", sa.Uuid(), nullable=False), sa.Column("entity_type", sa.String(length=64), nullable=False), sa.Column("source_id", sa.Uuid(), nullable=False), sa.Column("target_id", sa.Uuid(), nullable=False), sa.Column("content_digest", sa.String(length=64), nullable=False), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(["user_id"], ["users.id"], ondelete="CASCADE"), sa.PrimaryKeyConstraint("id"), sa.UniqueConstraint( "user_id", "backup_id", "entity_type", "source_id", name="uq_backup_import_entity_source", ), ) op.create_index("ix_backup_import_entities_user_id", "backup_import_entities", ["user_id"]) op.create_index("ix_backup_import_entities_backup_id", "backup_import_entities", ["backup_id"]) op.create_index("ix_backup_import_entities_source_id", "backup_import_entities", ["source_id"]) op.create_index("ix_backup_import_entities_target_id", "backup_import_entities", ["target_id"]) def downgrade() -> None: op.drop_index("ix_backup_import_entities_target_id", table_name="backup_import_entities") op.drop_index("ix_backup_import_entities_source_id", table_name="backup_import_entities") op.drop_index("ix_backup_import_entities_backup_id", table_name="backup_import_entities") op.drop_index("ix_backup_import_entities_user_id", table_name="backup_import_entities") op.drop_table("backup_import_entities") op.drop_index("ix_backup_imports_backup_id", table_name="backup_imports") op.drop_index("ix_backup_imports_user_id", table_name="backup_imports") op.drop_table("backup_imports") op.drop_index("ix_backup_preflights_expires_at", table_name="backup_preflights") op.drop_index("ix_backup_preflights_status", table_name="backup_preflights") op.drop_index("ix_backup_preflights_backup_id", table_name="backup_preflights") op.drop_index("ix_backup_preflights_user_id", table_name="backup_preflights") op.drop_table("backup_preflights")