PMFlow/backend/alembic/versions/20260514_add_agent_run_audi...

65 lines
2.4 KiB
Python

"""add agent run linkage to ai call logs
Revision ID: 20260514_add_agent_run_audit_linkage
Revises: 20260513_add_pmflow_ai_threads
Create Date: 2026-05-14
"""
from __future__ import annotations
from alembic import op
import sqlalchemy as sa
revision = "20260514_add_agent_run_audit_linkage"
down_revision = "20260513_add_pmflow_ai_threads"
branch_labels = None
depends_on = None
def _table_exists(table_name: str) -> bool:
return sa.inspect(op.get_bind()).has_table(table_name)
def _column_exists(table_name: str, column_name: str) -> bool:
if not _table_exists(table_name):
return False
inspector = sa.inspect(op.get_bind())
return any(item.get("name") == column_name for item in inspector.get_columns(table_name))
def _index_exists(table_name: str, index_name: str) -> bool:
if not _table_exists(table_name):
return False
inspector = sa.inspect(op.get_bind())
return any(item.get("name") == index_name for item in inspector.get_indexes(table_name))
def _create_index_once(index_name: str, table_name: str, columns: list[str]) -> None:
if _table_exists(table_name) and not _index_exists(table_name, index_name):
op.create_index(index_name, table_name, columns)
def upgrade() -> None:
if not _table_exists("ai_call_logs"):
return
if not _column_exists("ai_call_logs", "agent_run_id"):
op.add_column("ai_call_logs", sa.Column("agent_run_id", sa.String(length=80), nullable=True))
if not _column_exists("ai_call_logs", "agent_step_key"):
op.add_column("ai_call_logs", sa.Column("agent_step_key", sa.String(length=120), nullable=True))
_create_index_once("ix_ai_call_logs_agent_run_id", "ai_call_logs", ["agent_run_id"])
_create_index_once("ix_ai_call_logs_agent_step_key", "ai_call_logs", ["agent_step_key"])
def downgrade() -> None:
if not _table_exists("ai_call_logs"):
return
if _index_exists("ai_call_logs", "ix_ai_call_logs_agent_step_key"):
op.drop_index("ix_ai_call_logs_agent_step_key", table_name="ai_call_logs")
if _index_exists("ai_call_logs", "ix_ai_call_logs_agent_run_id"):
op.drop_index("ix_ai_call_logs_agent_run_id", table_name="ai_call_logs")
if _column_exists("ai_call_logs", "agent_step_key"):
op.drop_column("ai_call_logs", "agent_step_key")
if _column_exists("ai_call_logs", "agent_run_id"):
op.drop_column("ai_call_logs", "agent_run_id")