61 lines
3.2 KiB
Python
61 lines
3.2 KiB
Python
"""Freigaben und Run-Zustand
|
|
|
|
Revision ID: 0005
|
|
Revises: 0004
|
|
Erstellt: 2026-10-21 23:22:04.003727
|
|
"""
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
|
|
revision = '0005'
|
|
down_revision = '0004'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.create_table('approval_requests',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('run_id', sa.Uuid(), nullable=False),
|
|
sa.Column('workspace_id', sa.Integer(), nullable=False),
|
|
sa.Column('source_id', sa.Integer(), nullable=True),
|
|
sa.Column('call_id', sa.String(length=200), nullable=False),
|
|
sa.Column('tool', sa.String(length=100), nullable=False),
|
|
sa.Column('risk_class', sa.String(length=20), nullable=False),
|
|
sa.Column('reason', sa.String(length=200), nullable=False),
|
|
sa.Column('arguments', sa.JSON(), nullable=False),
|
|
sa.Column('preview', sa.Text(), nullable=False),
|
|
sa.Column('preconditions', sa.JSON(), nullable=False),
|
|
sa.Column('model_summary', sa.Text(), nullable=False),
|
|
sa.Column('policy', sa.JSON(), nullable=False),
|
|
sa.Column('hash', sa.String(length=64), nullable=False),
|
|
sa.Column('status', sa.String(length=20), nullable=False),
|
|
sa.Column('requested_by', sa.Integer(), nullable=False),
|
|
sa.Column('requested_at', sa.DateTime(timezone=True), nullable=False),
|
|
sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False),
|
|
sa.Column('decided_by', sa.Integer(), nullable=True),
|
|
sa.Column('decided_at', sa.DateTime(timezone=True), nullable=True),
|
|
sa.Column('comment', sa.Text(), nullable=False),
|
|
sa.Column('self_approved', sa.Boolean(), nullable=False),
|
|
sa.Column('result', sa.JSON(), nullable=False),
|
|
sa.Column('replaces_id', sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(['decided_by'], ['users.id'], name=op.f('fk_approval_requests_decided_by_users')),
|
|
sa.ForeignKeyConstraint(['replaces_id'], ['approval_requests.id'], name=op.f('fk_approval_requests_replaces_id_approval_requests')),
|
|
sa.ForeignKeyConstraint(['requested_by'], ['users.id'], name=op.f('fk_approval_requests_requested_by_users')),
|
|
sa.ForeignKeyConstraint(['run_id'], ['task_runs.id'], name=op.f('fk_approval_requests_run_id_task_runs'), ondelete='CASCADE'),
|
|
sa.ForeignKeyConstraint(['source_id'], ['data_sources.id'], name=op.f('fk_approval_requests_source_id_data_sources'), ondelete='SET NULL'),
|
|
sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], name=op.f('fk_approval_requests_workspace_id_workspaces'), ondelete='CASCADE'),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_approval_requests'))
|
|
)
|
|
op.create_index('ix_approval_requests_pending', 'approval_requests', ['workspace_id'], unique=False, postgresql_where=sa.text("status = 'pending'"))
|
|
op.create_index('ix_approval_requests_run_id', 'approval_requests', ['run_id'], unique=False)
|
|
op.add_column('task_runs', sa.Column('state', sa.JSON(), nullable=False, server_default='{}'))
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_column('task_runs', 'state')
|
|
op.drop_index('ix_approval_requests_run_id', table_name='approval_requests')
|
|
op.drop_index('ix_approval_requests_pending', table_name='approval_requests', postgresql_where=sa.text("status = 'pending'"))
|
|
op.drop_table('approval_requests')
|