"""add user_behavior_logs table Revision ID: 016_add_user_behavior_logs Revises: 015_add_agent_execution_logs Create Date: 2026-05-10 """ from alembic import op import sqlalchemy as sa from sqlalchemy.dialects.mysql import CHAR revision = "016_add_user_behavior_logs" down_revision = "015_add_agent_execution_logs" branch_labels = None depends_on = None def upgrade() -> None: op.create_table( "user_behavior_logs", sa.Column("id", CHAR(36), primary_key=True, comment="日志ID"), sa.Column("user_id", sa.String(36), nullable=False, comment="用户 ID"), sa.Column("category", sa.String(30), nullable=False, comment="行为类别"), sa.Column("action", sa.String(100), nullable=False, comment="具体动作"), sa.Column("context", sa.JSON, nullable=True, comment="行为上下文"), sa.Column("result", sa.JSON, nullable=True, comment="行为结果"), sa.Column("source", sa.String(50), nullable=True, comment="来源"), sa.Column("session_id", sa.String(100), nullable=True, comment="会话标识"), sa.Column("ip_address", sa.String(50), nullable=True, comment="客户端 IP"), sa.Column("user_agent", sa.String(500), nullable=True, comment="用户代理"), sa.Column("created_at", sa.DateTime, comment="发生时间"), ) op.create_index("ix_user_behavior_user_id", "user_behavior_logs", ["user_id"]) op.create_index("ix_user_behavior_category", "user_behavior_logs", ["category"]) op.create_index("ix_user_behavior_created_at", "user_behavior_logs", ["created_at"]) def downgrade() -> None: op.drop_index("ix_user_behavior_created_at", table_name="user_behavior_logs") op.drop_index("ix_user_behavior_category", table_name="user_behavior_logs") op.drop_index("ix_user_behavior_user_id", table_name="user_behavior_logs") op.drop_table("user_behavior_logs")