78 lines
3.7 KiB
Python
78 lines
3.7 KiB
Python
|
|
"""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
|
||
|
|
|
||
|
|
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', sa.BigInteger(), 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', sa.BigInteger(), 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', sa.BigInteger(), autoincrement=True, nullable=False),
|
||
|
|
sa.Column('tenant', sa.String(length=64), nullable=False),
|
||
|
|
sa.Column('package_version_id', sa.BigInteger(), 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 ###
|