"""add participants field to conversations table 为会话表添加 participants JSON 字段,支持邀请功能(P0-09~P0-11)。 与 collaborating_agent_ids(摇人 = 坐席间协作)独立, participants 存储被邀请的员工/部门列表。 新增字段: - participants: JSON, 非空, 默认空列表, 被邀请参与会话的人员列表 数据格式: [ { "id": "employee_user_id", "name": "员工姓名", "department": "部门名称", "type": "employee", # employee 或 department "joined": false, # 是否已加入会话 "joined_at": null, # 加入时间 "invited_by": "agent_id" # 邀请人坐席ID } ] Revision ID: 004_participants Revises: 003_suggestion_action Create Date: 2026-07-14 14:00:00.000000 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '004_participants' down_revision = '003_suggestion_action' branch_labels = None depends_on = None def upgrade() -> None: """添加 participants 字段到 conversations 表。""" # 被邀请参与会话的人员列表(JSON 数组) # 与 collaborating_agent_ids 区别: # collaborating_agent_ids = 坐席→坐席协作(摇人) # participants = 坐席→员工/部门(邀请) op.add_column( 'conversations', sa.Column( 'participants', sa.JSON, nullable=False, server_default='[]', # 默认空数组 comment='被邀请参与会话的人员列表(邀请功能)', ) ) def downgrade() -> None: """移除 participants 字段。""" op.drop_column('conversations', 'participants')