45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""
|
|
Migrazione 0022: indice parziale su mailboxes(tenant_id, email_address).
|
|
|
|
Sostituisce l'indice UNIQUE completo con un indice parziale che esclude
|
|
le caselle soft-deleted (status = 'deleted'), permettendo la ri-creazione
|
|
di una casella con lo stesso indirizzo email dopo averla eliminata.
|
|
|
|
Revision ID: 0022_partial_unique_mailbox_email
|
|
Revises: 0021_add_rem_support
|
|
"""
|
|
|
|
from alembic import op
|
|
|
|
# ── Identificatori migrazione ─────────────────────────────────────────────────
|
|
revision = "0022"
|
|
down_revision = "0021"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# Rimuove il vecchio indice univoco completo (include anche i deleted)
|
|
op.drop_index("uq_mailbox_email_tenant", table_name="mailboxes")
|
|
|
|
# Crea un indice univoco parziale: solo caselle non-deleted
|
|
# Questo permette di avere piu' record soft-deleted con la stessa email
|
|
# e di ri-creare una casella dopo averla eliminata.
|
|
op.execute(
|
|
"CREATE UNIQUE INDEX uq_mailbox_email_tenant_active "
|
|
"ON mailboxes (tenant_id, email_address) "
|
|
"WHERE status != 'deleted'"
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("uq_mailbox_email_tenant_active", table_name="mailboxes")
|
|
|
|
# Ricrea l'indice completo originale
|
|
op.create_index(
|
|
"uq_mailbox_email_tenant",
|
|
"mailboxes",
|
|
["tenant_id", "email_address"],
|
|
unique=True,
|
|
)
|