Files
PecHub/backend/alembic/versions/0023_add_riferimento_message_id.py
T
2026-06-18 16:31:29 +02:00

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