Ctrl K
ComunidadGuías…

migrations/versions/6f4c2d8a91b7_add_message_sequence_ordering.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""add canonical message persistence ordering

Revision ID: 6f4c2d8a91b7
Revises: d3f8a1c6b904
Create Date: 2026-09-28

Adds a database-generated monotonic sequence to messages.

created_at remains the wall-clock timestamp.
sequence_no becomes the canonical persistence ordering key.
"""

from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op

from migrations.utils.safe_ddl import drop_column_if_exists, has_column

revision: str = "6f4c2d8a91b7"
down_revision: str | None = "d3f8a1c6b904"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None

TABLE = "messages"
COLUMN = "sequence_no"


def upgrade() -> None:
    if has_column(TABLE, COLUMN):
        return

    # MySQL requires AUTO_INCREMENT to be indexed. Message.id remains the
    # existing string primary key; sequence_no is a separate unique ordering
    # key generated by the database.
    op.execute(
        sa.text(
            "ALTER TABLE messages "
            "ADD COLUMN sequence_no BIGINT NOT NULL AUTO_INCREMENT "
            "COMMENT 'Canonical monotonic persistence order for conversation messages.', "
            "ADD UNIQUE INDEX ix_messages_sequence_no (sequence_no)"
        )
    )


def downgrade() -> None:
    drop_column_if_exists(TABLE, COLUMN)