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)")