50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
"""
|
|
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")
|