""" Migrazione 0023: aggiunge colonna riferimento_message_id alla tabella messages. La colonna memorizza il valore di X-Riferimento-Message-ID presente nelle ricevute PEC inbound (accettazione, avvenuta_consegna, ecc.). Serve per: 1. Binding retroattivo: se il binding fallisce durante la sync (race condition con send_pec che non ha ancora committato message_id_header), il job di rebinding puo' usare questa colonna per ricollegare le ricevute orfane al messaggio outbound originale senza dover ri-leggere l'EML da MinIO. 2. Diagnostica: permette di verificare rapidamente quali ricevute hanno un X-Riferimento valorizzato ma non hanno trovato il corrispondente outbound. Revision ID: 0023_add_riferimento_message_id Revises: 0022_partial_unique_mailbox_email """ from alembic import op import sqlalchemy as sa # ── Identificatori migrazione ───────────────────────────────────────────────── revision = "0023" down_revision = "0022" branch_labels = None depends_on = None def upgrade() -> None: # Colonna nullable: solo le ricevute inbound la hanno valorizzata. # I messaggi posta_certificata (inbound e outbound) la lasciano NULL. op.add_column( "messages", sa.Column("riferimento_message_id", sa.Text(), nullable=True), ) # Indice parziale per le query di binding retroattivo: # cerca ricevute orfane (parent_message_id IS NULL) con riferimento valorizzato. op.create_index( "idx_messages_riferimento", "messages", ["riferimento_message_id"], postgresql_where=sa.text("riferimento_message_id IS NOT NULL"), ) def downgrade() -> None: op.drop_index("idx_messages_riferimento", table_name="messages") op.drop_column("messages", "riferimento_message_id")