Files
new_lottery_bot/docs/MIGRATION_006_REPORT.md
Andrew K. Choi 1551b8b29f
Some checks reported errors
continuous-integration/drone/push Build encountered an error
fix: обработка ошибки 'message is not modified' в conduct_lottery_draw_confirm
2025-11-17 15:46:34 +09:00

2.6 KiB
Raw Blame History

Отчёт о Миграции База Данных 006

Дата: 17 ноября 2025 г.

Проблема

При рефакторинге и применении новой архитектуры выяснилось, что в базе данных отсутствуют некоторые столбцы, которые присутствуют в моделях SQLAlchemy.

Отсутствующие столбцы:

1. Таблица participations:

  • account_id (INTEGER) - внешний ключ на таблицу accounts

2. Таблица winners:

  • is_notified (BOOLEAN) - флаг уведомления победителя
  • is_claimed (BOOLEAN) - флаг получения приза
  • claimed_at (TIMESTAMP WITH TIME ZONE) - время получения приза

Решение

Создана миграция 006_fix_missing_columns.py которая:

Добавляет:

  1. participations.account_id с внешним ключом на accounts(id)
  2. winners.is_notified с значением по умолчанию FALSE
  3. winners.is_claimed с значением по умолчанию FALSE
  4. winners.claimed_at без значения по умолчанию (NULL)

Особенности реализации:

  • Использует DO $$ ... END $$; блоки для безопасного добавления столбцов
  • Проверяет существование столбцов перед добавлением (idempotent)
  • Включает откат (downgrade) функцию для отмены изменений
  • Поддерживает повторное выполнение без ошибок

Применение миграции:

alembic upgrade head

Результат:

Все столбцы добавлены успешно
Схема БД соответствует моделям SQLAlchemy
Бот может создавать записи в таблице winners без ошибок
Миграция готова для production развертывания

Версия после применения:

  • До: 005 (add_chat_system)
  • После: 006 (fix_missing_columns) ← HEAD

Для разработчиков:

При развертывании на новых серверах достаточно выполнить:

alembic upgrade head

Миграция автоматически проверит и добавит отсутствующие столбцы.