"""Добавить public_id в таблицу tasks. Revision ID: 002 Revises: 001 Create Date: 2026-05-24 """ import secrets from alembic import op import sqlalchemy as sa from sqlalchemy import text revision = "002" down_revision = "001" branch_labels = None depends_on = None def upgrade() -> None: # Добавляем колонку как nullable — сначала заполним данными, потом сделаем NOT NULL op.add_column( "tasks", sa.Column("public_id", sa.String(32), nullable=True), ) # Заполняем существующие строки уникальными public_id conn = op.get_bind() tasks = conn.execute(text("SELECT id FROM tasks")).fetchall() for (task_id,) in tasks: conn.execute( text("UPDATE tasks SET public_id = :pid WHERE id = :id"), {"pid": secrets.token_urlsafe(16), "id": task_id}, ) # Делаем NOT NULL и добавляем уникальный индекс op.alter_column("tasks", "public_id", nullable=False) op.create_unique_constraint("uq_tasks_public_id", "tasks", ["public_id"]) op.create_index("ix_tasks_public_id", "tasks", ["public_id"], unique=True) def downgrade() -> None: op.drop_index("ix_tasks_public_id", table_name="tasks") op.drop_constraint("uq_tasks_public_id", "tasks", type_="unique") op.drop_column("tasks", "public_id")