From fb8f4fdeebcdc8c231de0a78d6171350cd69dfa4 Mon Sep 17 00:00:00 2001 From: qzl Date: Mon, 2 Mar 2026 15:51:04 +0800 Subject: [PATCH] fix(migration): allow multiple agents per user (one per agent_type) - Drop single-column UNIQUE constraint on user_agents.user_id - Add composite UNIQUE constraint on (user_id, agent_type) - Enables trigger to insert 3 agents per user (INTENT_RECOGNITION, TASK_EXECUTION, RESULT_REPORTING) - Maintain reversible downgrade path --- .../versions/50ae013ce530_add_user_agent_catalog.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/backend/alembic/versions/50ae013ce530_add_user_agent_catalog.py b/backend/alembic/versions/50ae013ce530_add_user_agent_catalog.py index b5b106d..8872071 100644 --- a/backend/alembic/versions/50ae013ce530_add_user_agent_catalog.py +++ b/backend/alembic/versions/50ae013ce530_add_user_agent_catalog.py @@ -20,6 +20,12 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: + op.drop_constraint("uq_user_agents_user_id", "user_agents", type_="unique") + + op.create_unique_constraint( + "uq_user_agents_user_id_agent_type", "user_agents", ["user_id", "agent_type"] + ) + op.create_table( "user_agent_catalog", sa.Column("agent_type", sa.String(20), nullable=False), @@ -132,6 +138,12 @@ def downgrade() -> None: $$; """) + op.drop_constraint( + "uq_user_agents_user_id_agent_type", "user_agents", type_="unique" + ) + + op.create_unique_constraint("uq_user_agents_user_id", "user_agents", ["user_id"]) + _drop_rls("user_agent_catalog") op.drop_constraint( "chk_user_agent_catalog_status", "user_agent_catalog", type_="check"