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