"""tenant-keyed package store Every table holding owned data carries `tenant` from this, the first migration, per business-app-service-contract_v0.1 section 1.3 — so a later consolidation is a data copy rather than a rewrite, and no business logic may assume it is the only tenant (section 1.4). Revision ID: 0001 Revises: """ from alembic import op import sqlalchemy as sa # Matches models.BigIntPK: BIGINT on PostgreSQL, INTEGER on SQLite so the # test database autoincrements the same way production does. BigIntPK = sa.BigInteger().with_variant(sa.Integer, "sqlite") revision = '0001' down_revision = None branch_labels = None depends_on = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.create_table('index_entries', sa.Column('id', BigIntPK, autoincrement=True, nullable=False), sa.Column('tenant', sa.String(length=64), nullable=False), sa.Column('registry', sa.String(length=128), nullable=False), sa.Column('package_id', sa.String(length=512), nullable=False), sa.Column('version', sa.String(length=64), nullable=False), sa.Column('source', sa.Text(), nullable=False), sa.Column('method', sa.String(length=32), nullable=False), sa.Column('declared_author', sa.String(length=256), nullable=True), sa.Column('declared_source', sa.Text(), nullable=True), sa.Column('license', sa.String(length=128), nullable=True), sa.Column('included_at', sa.DateTime(timezone=True), nullable=False), sa.Column('last_seen_at', sa.DateTime(timezone=True), nullable=True), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('tenant', 'registry', 'package_id', 'version', name='uq_index_entry') ) op.create_table('package_versions', sa.Column('id', BigIntPK, autoincrement=True, nullable=False), sa.Column('tenant', sa.String(length=64), nullable=False), sa.Column('registry', sa.String(length=128), nullable=False), sa.Column('package_id', sa.String(length=512), nullable=False), sa.Column('version', sa.String(length=64), nullable=False), sa.Column('name', sa.String(length=256), nullable=False), sa.Column('summary', sa.Text(), nullable=False), sa.Column('package_type', sa.String(length=32), nullable=False), sa.Column('license', sa.String(length=128), nullable=True), sa.Column('tags', sa.Text(), nullable=False), sa.Column('manifest', sa.Text(), nullable=False), sa.Column('content_digest', sa.String(length=71), nullable=False), sa.Column('published_at', sa.DateTime(timezone=True), nullable=False), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('tenant', 'registry', 'package_id', 'version', name='uq_package_version') ) op.create_index('ix_package_versions_tenant_id', 'package_versions', ['tenant', 'package_id'], unique=False) op.create_table('package_files', sa.Column('id', BigIntPK, autoincrement=True, nullable=False), sa.Column('tenant', sa.String(length=64), nullable=False), sa.Column('package_version_id', BigIntPK, nullable=False), sa.Column('path', sa.String(length=1024), nullable=False), sa.Column('content', sa.LargeBinary(), nullable=False), sa.ForeignKeyConstraint(['package_version_id'], ['package_versions.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('package_version_id', 'path', name='uq_package_file_path') ) op.create_index('ix_package_files_tenant', 'package_files', ['tenant'], unique=False) # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.drop_index('ix_package_files_tenant', table_name='package_files') op.drop_table('package_files') op.drop_index('ix_package_versions_tenant_id', table_name='package_versions') op.drop_table('package_versions') op.drop_table('index_entries') # ### end Alembic commands ###