From 6f35d85a97b9d9ff5351ccdafa3cf0d331ffde19 Mon Sep 17 00:00:00 2001 From: Kitos Date: Mon, 18 May 2026 13:19:20 +0200 Subject: [PATCH] feat(db): add Phase 0 composite indexes migration [FASE-0.3] Add idempotent Alembic revision b028 for campaign_tests (campaign_id, test_id) to support campaign-scoped queries. --- ...8_phase0_campaign_tests_composite_index.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 backend/alembic/versions/b028_phase0_campaign_tests_composite_index.py diff --git a/backend/alembic/versions/b028_phase0_campaign_tests_composite_index.py b/backend/alembic/versions/b028_phase0_campaign_tests_composite_index.py new file mode 100644 index 0000000..5dfcc5d --- /dev/null +++ b/backend/alembic/versions/b028_phase0_campaign_tests_composite_index.py @@ -0,0 +1,35 @@ +"""phase0 SR-006 — campaign_tests composite index + +Most SR-006 indexes already ship in b005, b009, b018, b019, and b026. +``tests`` has no ``campaign_id`` column (membership is ``campaign_tests``), +so this revision adds a composite index to speed “tests in campaign” joins. + +Revision ID: b028phase0 +Revises: b027scorecfg +Create Date: 2026-05-18 12:00:00.000000 + +""" +from typing import Sequence, Union + +from alembic import op + +revision: str = "b028phase0" +down_revision: Union[str, None] = "b027scorecfg" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.create_index( + "ix_campaign_tests_campaign_id_test_id", + "campaign_tests", + ["campaign_id", "test_id"], + unique=False, + ) + + +def downgrade() -> None: + op.drop_index( + "ix_campaign_tests_campaign_id_test_id", + table_name="campaign_tests", + )