"""Freigabestufen, Vier-Augen-Prinzip, Regeln je Quelle, globale Approver Revision ID: 0009 Revises: 0008 Erstellt: 2026-10-22 09:48:09.711126 """ import sqlalchemy as sa from alembic import op revision = '0009' down_revision = '0008' branch_labels = None depends_on = None def upgrade() -> None: op.create_table('source_tool_policies', sa.Column('source_id', sa.Integer(), nullable=False), sa.Column('tool_name', sa.String(length=100), nullable=False), sa.Column('workspace_id', sa.Integer(), nullable=False), sa.Column('decision', sa.String(length=20), nullable=False), sa.Column('four_eyes', sa.Boolean(), nullable=False), sa.Column('updated_by', sa.Integer(), nullable=False), sa.Column('updated', sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(['source_id'], ['data_sources.id'], name=op.f('fk_source_tool_policies_source_id_data_sources'), ondelete='CASCADE'), sa.ForeignKeyConstraint(['updated_by'], ['users.id'], name=op.f('fk_source_tool_policies_updated_by_users')), sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], name=op.f('fk_source_tool_policies_workspace_id_workspaces'), ondelete='CASCADE'), sa.PrimaryKeyConstraint('source_id', 'tool_name', name=op.f('pk_source_tool_policies')) ) op.create_index(op.f('ix_source_tool_policies_workspace_id'), 'source_tool_policies', ['workspace_id'], unique=False) op.add_column('approval_requests', sa.Column('approval_level', sa.String(length=20), server_default='workspace_admin', nullable=False)) op.add_column('approval_requests', sa.Column('four_eyes', sa.Boolean(), server_default=sa.text('false'), nullable=False)) op.add_column('tool_definitions', sa.Column('approval_level', sa.String(length=20), server_default='workspace_admin', nullable=False)) op.add_column('tool_definitions', sa.Column('four_eyes', sa.Boolean(), server_default=sa.text('false'), nullable=False)) op.add_column('users', sa.Column('is_global_approver', sa.Boolean(), server_default=sa.text('false'), nullable=False)) op.add_column('workspace_tool_policies', sa.Column('four_eyes', sa.Boolean(), server_default=sa.text('false'), nullable=False)) def downgrade() -> None: op.drop_column('workspace_tool_policies', 'four_eyes') op.drop_column('users', 'is_global_approver') op.drop_column('tool_definitions', 'four_eyes') op.drop_column('tool_definitions', 'approval_level') op.drop_column('approval_requests', 'four_eyes') op.drop_column('approval_requests', 'approval_level') op.drop_index(op.f('ix_source_tool_policies_workspace_id'), table_name='source_tool_policies') op.drop_table('source_tool_policies')