|
|
|
|
@@ -0,0 +1,158 @@
|
|
|
|
|
"""v0.1.7 files baseline
|
|
|
|
|
|
|
|
|
|
Revision ID: a7b8c9d0e1f3
|
|
|
|
|
Revises: None
|
|
|
|
|
Create Date: 2026-07-11 00:00:00.000000
|
|
|
|
|
"""
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from alembic import op
|
|
|
|
|
import sqlalchemy as sa
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
revision = 'a7b8c9d0e1f3'
|
|
|
|
|
down_revision = None
|
|
|
|
|
branch_labels = None
|
|
|
|
|
depends_on = '4f2a9c8e7b6d'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def upgrade() -> None:
|
|
|
|
|
op.create_table('file_connector_credentials',
|
|
|
|
|
sa.Column('id', sa.String(length=255), nullable=False),
|
|
|
|
|
sa.Column('tenant_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('scope_type', sa.String(length=20), nullable=False),
|
|
|
|
|
sa.Column('scope_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('label', sa.String(length=255), nullable=False),
|
|
|
|
|
sa.Column('provider', sa.String(length=50), nullable=True),
|
|
|
|
|
sa.Column('enabled', sa.Boolean(), nullable=False),
|
|
|
|
|
sa.Column('credential_mode', sa.String(length=30), nullable=False),
|
|
|
|
|
sa.Column('username', sa.String(length=320), nullable=True),
|
|
|
|
|
sa.Column('password_encrypted', sa.Text(), nullable=True),
|
|
|
|
|
sa.Column('token_encrypted', sa.Text(), nullable=True),
|
|
|
|
|
sa.Column('password_env', sa.String(length=255), nullable=True),
|
|
|
|
|
sa.Column('token_env', sa.String(length=255), nullable=True),
|
|
|
|
|
sa.Column('secret_ref', sa.String(length=1000), nullable=True),
|
|
|
|
|
sa.Column('policy', sa.JSON(), nullable=True),
|
|
|
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
|
|
|
sa.Column('created_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('updated_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.ForeignKeyConstraint(['created_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_credentials_created_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.ForeignKeyConstraint(['tenant_id'], ['core_scopes.id'], name=op.f('fk_file_connector_credentials_tenant_id_scopes'), ondelete='CASCADE'),
|
|
|
|
|
sa.ForeignKeyConstraint(['updated_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_credentials_updated_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_file_connector_credentials'))
|
|
|
|
|
)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_created_by_user_id'), 'file_connector_credentials', ['created_by_user_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_enabled'), 'file_connector_credentials', ['enabled'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_provider'), 'file_connector_credentials', ['provider'], unique=False)
|
|
|
|
|
op.create_index('ix_file_connector_credentials_scope', 'file_connector_credentials', ['scope_type', 'scope_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_scope_id'), 'file_connector_credentials', ['scope_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_scope_type'), 'file_connector_credentials', ['scope_type'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_tenant_id'), 'file_connector_credentials', ['tenant_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_credentials_updated_by_user_id'), 'file_connector_credentials', ['updated_by_user_id'], unique=False)
|
|
|
|
|
op.create_table('file_connector_policies',
|
|
|
|
|
sa.Column('id', sa.String(length=36), nullable=False),
|
|
|
|
|
sa.Column('tenant_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('scope_type', sa.String(length=20), nullable=False),
|
|
|
|
|
sa.Column('scope_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('policy', sa.JSON(), nullable=False),
|
|
|
|
|
sa.Column('created_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('updated_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.ForeignKeyConstraint(['created_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_policies_created_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.ForeignKeyConstraint(['tenant_id'], ['core_scopes.id'], name=op.f('fk_file_connector_policies_tenant_id_scopes'), ondelete='CASCADE'),
|
|
|
|
|
sa.ForeignKeyConstraint(['updated_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_policies_updated_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_file_connector_policies')),
|
|
|
|
|
sa.UniqueConstraint('tenant_id', 'scope_type', 'scope_id', name='uq_file_connector_policies_scope')
|
|
|
|
|
)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_policies_created_by_user_id'), 'file_connector_policies', ['created_by_user_id'], unique=False)
|
|
|
|
|
op.create_index('ix_file_connector_policies_scope', 'file_connector_policies', ['scope_type', 'scope_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_policies_scope_id'), 'file_connector_policies', ['scope_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_policies_scope_type'), 'file_connector_policies', ['scope_type'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_policies_tenant_id'), 'file_connector_policies', ['tenant_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_policies_updated_by_user_id'), 'file_connector_policies', ['updated_by_user_id'], unique=False)
|
|
|
|
|
op.create_table('file_connector_profiles',
|
|
|
|
|
sa.Column('id', sa.String(length=255), nullable=False),
|
|
|
|
|
sa.Column('tenant_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('scope_type', sa.String(length=20), nullable=False),
|
|
|
|
|
sa.Column('scope_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('label', sa.String(length=255), nullable=False),
|
|
|
|
|
sa.Column('provider', sa.String(length=50), nullable=False),
|
|
|
|
|
sa.Column('endpoint_url', sa.String(length=1000), nullable=True),
|
|
|
|
|
sa.Column('base_path', sa.String(length=1000), nullable=True),
|
|
|
|
|
sa.Column('enabled', sa.Boolean(), nullable=False),
|
|
|
|
|
sa.Column('credential_profile_id', sa.String(length=255), nullable=True),
|
|
|
|
|
sa.Column('credential_mode', sa.String(length=30), nullable=False),
|
|
|
|
|
sa.Column('username', sa.String(length=320), nullable=True),
|
|
|
|
|
sa.Column('password_encrypted', sa.Text(), nullable=True),
|
|
|
|
|
sa.Column('token_encrypted', sa.Text(), nullable=True),
|
|
|
|
|
sa.Column('password_env', sa.String(length=255), nullable=True),
|
|
|
|
|
sa.Column('token_env', sa.String(length=255), nullable=True),
|
|
|
|
|
sa.Column('secret_ref', sa.String(length=1000), nullable=True),
|
|
|
|
|
sa.Column('capabilities', sa.JSON(), nullable=True),
|
|
|
|
|
sa.Column('policy', sa.JSON(), nullable=True),
|
|
|
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
|
|
|
sa.Column('created_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('updated_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.ForeignKeyConstraint(['created_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_profiles_created_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.ForeignKeyConstraint(['tenant_id'], ['core_scopes.id'], name=op.f('fk_file_connector_profiles_tenant_id_scopes'), ondelete='CASCADE'),
|
|
|
|
|
sa.ForeignKeyConstraint(['updated_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_profiles_updated_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_file_connector_profiles'))
|
|
|
|
|
)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_created_by_user_id'), 'file_connector_profiles', ['created_by_user_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_credential_profile_id'), 'file_connector_profiles', ['credential_profile_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_enabled'), 'file_connector_profiles', ['enabled'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_provider'), 'file_connector_profiles', ['provider'], unique=False)
|
|
|
|
|
op.create_index('ix_file_connector_profiles_scope', 'file_connector_profiles', ['scope_type', 'scope_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_scope_id'), 'file_connector_profiles', ['scope_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_scope_type'), 'file_connector_profiles', ['scope_type'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_tenant_id'), 'file_connector_profiles', ['tenant_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_profiles_updated_by_user_id'), 'file_connector_profiles', ['updated_by_user_id'], unique=False)
|
|
|
|
|
op.create_table('file_connector_spaces',
|
|
|
|
|
sa.Column('id', sa.String(length=36), nullable=False),
|
|
|
|
|
sa.Column('tenant_id', sa.String(length=36), nullable=False),
|
|
|
|
|
sa.Column('owner_type', sa.String(length=20), nullable=False),
|
|
|
|
|
sa.Column('owner_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('owner_group_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('label', sa.String(length=255), nullable=False),
|
|
|
|
|
sa.Column('connector_profile_id', sa.String(length=255), nullable=False),
|
|
|
|
|
sa.Column('provider', sa.String(length=50), nullable=False),
|
|
|
|
|
sa.Column('library_id', sa.String(length=255), nullable=True),
|
|
|
|
|
sa.Column('remote_path', sa.String(length=1000), nullable=False),
|
|
|
|
|
sa.Column('sync_mode', sa.String(length=30), nullable=False),
|
|
|
|
|
sa.Column('read_only', sa.Boolean(), nullable=False),
|
|
|
|
|
sa.Column('is_active', sa.Boolean(), nullable=False),
|
|
|
|
|
sa.Column('created_by_user_id', sa.String(length=36), nullable=True),
|
|
|
|
|
sa.Column('deleted_at', sa.DateTime(timezone=True), nullable=True),
|
|
|
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
|
|
|
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
|
|
|
|
sa.ForeignKeyConstraint(['created_by_user_id'], ['access_users.id'], name=op.f('fk_file_connector_spaces_created_by_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.ForeignKeyConstraint(['owner_group_id'], ['access_groups.id'], name=op.f('fk_file_connector_spaces_owner_group_id_access_groups'), ondelete='SET NULL'),
|
|
|
|
|
sa.ForeignKeyConstraint(['owner_user_id'], ['access_users.id'], name=op.f('fk_file_connector_spaces_owner_user_id_access_users'), ondelete='SET NULL'),
|
|
|
|
|
sa.ForeignKeyConstraint(['tenant_id'], ['core_scopes.id'], name=op.f('fk_file_connector_spaces_tenant_id_scopes'), ondelete='CASCADE'),
|
|
|
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_file_connector_spaces'))
|
|
|
|
|
)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_connector_profile_id'), 'file_connector_spaces', ['connector_profile_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_created_by_user_id'), 'file_connector_spaces', ['created_by_user_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_deleted_at'), 'file_connector_spaces', ['deleted_at'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_is_active'), 'file_connector_spaces', ['is_active'], unique=False)
|
|
|
|
|
op.create_index('ix_file_connector_spaces_owner', 'file_connector_spaces', ['tenant_id', 'owner_type', 'owner_user_id', 'owner_group_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_owner_group_id'), 'file_connector_spaces', ['owner_group_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_owner_type'), 'file_connector_spaces', ['owner_type'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_owner_user_id'), 'file_connector_spaces', ['owner_user_id'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_provider'), 'file_connector_spaces', ['provider'], unique=False)
|
|
|
|
|
op.create_index(op.f('ix_file_connector_spaces_tenant_id'), 'file_connector_spaces', ['tenant_id'], unique=False)
|
|
|
|
|
op.create_index('uq_file_connector_spaces_active_group_label', 'file_connector_spaces', ['tenant_id', 'owner_group_id', 'label'], unique=True, sqlite_where=sa.text("owner_type = 'group' AND deleted_at IS NULL"), postgresql_where=sa.text("owner_type = 'group' AND deleted_at IS NULL"))
|
|
|
|
|
op.create_index('uq_file_connector_spaces_active_user_label', 'file_connector_spaces', ['tenant_id', 'owner_user_id', 'label'], unique=True, sqlite_where=sa.text("owner_type = 'user' AND deleted_at IS NULL"), postgresql_where=sa.text("owner_type = 'user' AND deleted_at IS NULL"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def downgrade() -> None:
|
|
|
|
|
op.drop_table('file_connector_spaces')
|
|
|
|
|
op.drop_table('file_connector_profiles')
|
|
|
|
|
op.drop_table('file_connector_policies')
|
|
|
|
|
op.drop_table('file_connector_credentials')
|