From 6e0ab47f3a7908590911414d5d79b153ac448e10 Mon Sep 17 00:00:00 2001 From: Leopoldadmin Date: Sat, 4 Jul 2026 01:32:13 +0000 Subject: [PATCH] =?UTF-8?q?B2:=20Migration=200014=20=E2=80=94=20drop=20glo?= =?UTF-8?q?bal=20unique=20on=20currency.code,=20add=20tenant-scoped=20uniq?= =?UTF-8?q?ue=20constraint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alembic/versions/0014_currency_unique_fix.py | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 alembic/versions/0014_currency_unique_fix.py diff --git a/alembic/versions/0014_currency_unique_fix.py b/alembic/versions/0014_currency_unique_fix.py new file mode 100644 index 0000000..273d787 --- /dev/null +++ b/alembic/versions/0014_currency_unique_fix.py @@ -0,0 +1,35 @@ +"""Fix currency unique constraint — tenant-scoped instead of global. + +Revision ID: 0014_currency_unique_fix +Revises: 0013_addresses +Create Date: 2026-07-04 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op + +revision: str = "0014_currency_unique_fix" +down_revision: Union[str, None] = "0013_addresses" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # Drop the old global unique constraint on currencies.code + op.execute("ALTER TABLE currencies DROP CONSTRAINT IF EXISTS currencies_code_key") + op.execute("DROP INDEX IF EXISTS currencies_code_key") + + # Add tenant-scoped unique constraint + op.create_unique_constraint( + "uq_currency_tenant_code", + "currencies", + ["tenant_id", "code"], + ) + + +def downgrade() -> None: + op.drop_constraint("uq_currency_tenant_code", "currencies", type_="unique") + op.execute("ALTER TABLE currencies ADD CONSTRAINT currencies_code_key UNIQUE (code)")