Patch Notes dev-10 #12

Merged
KerradKerridi merged 9 commits from dev-10 into master 2026-01-23 16:54:47 +00:00
KerradKerridi commented 2026-01-23 16:37:34 +00:00 (Migrated from github.com)

Patch Notes - Версия dev-10

📋 Обзор изменений

Версия dev-10 включает значительные улучшения системы управления банами, обработки постов и работы с медиагруппами. Добавлена полная история банов пользователей, улучшена система хранения и форматирования текстов постов, а также проведен рефакторинг обработчиков блокировок.


🆕 Новые функции

1. История банов пользователей (Blacklist History)

  • Добавлена система отслеживания истории банов/разбанов

    • Создана новая таблица blacklist_history для хранения полной истории блокировок
    • Каждая запись содержит: user_id, message_for_user, date_ban, date_unban, ban_author
    • Автоматическое создание записи в истории при каждом бане
    • Автоматическое обновление записи при разбане
    • Индексы для оптимизации запросов по user_id и датам
  • Новый репозиторий BlacklistHistoryRepository

    • Методы для добавления записей при бане/разбане
    • Методы для получения истории банов пользователя
    • Методы для получения статистики по банам
  • Миграционные скрипты

    • create_blacklist_history_table.py - создание таблицы истории
    • migrate_blacklist_to_history.py - миграция существующих данных из blacklist в blacklist_history

2. Отслеживание автора блокировки

  • Добавлено поле ban_author в модель BlacklistUser

    • Хранение ID администратора, который заблокировал пользователя
    • Поддержка внешних ключей с каскадным удалением
    • Обновлены все методы работы с черным списком для поддержки ban_author
  • Миграционный скрипт

    • add_ban_author_column_to_blacklist.py - добавление колонки ban_author в существующую таблицу blacklist

3. Хранение сырых текстов постов

  • Изменена логика хранения и форматирования текстов постов

    • Сырые тексты постов теперь хранятся в базе данных без форматирования
    • Форматирование текста (добавление имени автора, никнейма) происходит непосредственно перед отправкой в канал
    • Это позволяет изменять форматирование без изменения данных в БД
    • Поддержка анонимных постов через поле is_anonymous
  • Новые методы в PostRepository

    • get_post_text_by_helper_id() - получение сырого текста по helper_message_id
    • get_post_text_and_anonymity_by_message_id() - получение текста и флага анонимности
    • get_post_text_and_anonymity_by_helper_id() - получение текста и флага анонимности по helper_id
  • Миграционные скрипты

    • add_is_anonymous_column.py - добавление колонки is_anonymous
    • clean_post_text.py - очистка и нормализация текстов постов в базе данных
    • backfill_post_status_legacy.py - обновление статусов старых постов

🔄 Улучшения и рефакторинг

1. Рефакторинг процесса блокировки пользователей

  • Улучшена обработка блокировок в callback-обработчиках

    • Упрощена логика блокировки через callback-кнопки
    • Улучшена обработка ошибок при блокировке
    • Добавлено логирование всех операций блокировки
  • Обновлены сервисы

    • AdminService - обновлена работа с ban_author
    • BanService - улучшена обработка блокировок с учетом истории
    • AsyncBotDB.set_user_blacklist() - автоматическое создание записи в истории

2. Улучшение обработки медиагрупп

  • Обновлена обработка статусов медиагрупп

    • Улучшен метод update_status_for_media_group_by_helper_id() в PostRepository
    • Добавлена проверка количества обновленных строк
    • Улучшено логирование операций с медиагруппами
    • Исправлена обработка медиагрупп при публикации
  • Интеграционные тесты

    • Расширены тесты для проверки работы с медиагруппами
    • Добавлены тесты для проверки статусов медиагрупп

3. Улучшение управления статусами сообщений

  • Обновлена схема базы данных
    • Улучшена обработка статусов постов (suggest, approved, rejected)
    • Добавлена проверка количества обновленных строк при изменении статуса
    • Улучшено логирование операций со статусами

🗄️ Изменения в базе данных

Новые таблицы

  • blacklist_history - история банов/разбанов пользователей
    • Поля: id, user_id, message_for_user, date_ban, date_unban, ban_author, created_at, updated_at
    • Внешние ключи на our_users
    • Индексы для оптимизации запросов

Изменения в существующих таблицах

  • blacklist - добавлено поле ban_author (INTEGER, FOREIGN KEY)
  • post_from_telegram_suggest - добавлено поле is_anonymous (INTEGER)

🧪 Тестирование

Новые тесты

  • test_blacklist_history_repository.py - полное покрытие тестами нового репозитория истории банов

    • Тесты создания записей при бане
    • Тесты обновления записей при разбане
    • Тесты получения истории пользователя
    • Тесты статистики
  • test_post_repository.py - расширены тесты для работы с сырыми текстами

  • test_post_service.py - новые тесты для сервиса постов

  • test_post_repository_integration.py - интеграционные тесты для репозитория постов

  • test_auto_unban_integration.py - расширены интеграционные тесты авторазбана

Обновленные тесты

  • test_blacklist_repository.py - обновлены тесты с учетом ban_author
  • test_async_db.py - добавлены тесты для новых методов работы с историей
  • test_refactored_admin_handlers.py - обновлены тесты обработчиков админов

🛠️ Миграционные скрипты

Добавлены следующие скрипты миграции:

  1. create_blacklist_history_table.py - создание таблицы истории банов
  2. migrate_blacklist_to_history.py - миграция данных из blacklist в blacklist_history
  3. add_ban_author_column_to_blacklist.py - добавление колонки ban_author
  4. add_is_anonymous_column.py - добавление колонки is_anonymous
  5. backfill_post_status_legacy.py - обновление статусов старых постов
  6. clean_post_text.py - очистка и нормализация текстов постов

📊 Статистика изменений

  • 31 файл изменен
  • 2584 строки добавлено
  • 127 строк удалено

Основные измененные компоненты:

  • database/async_db.py - добавлены методы работы с историей банов
  • database/models.py - добавлена модель BlacklistHistoryRecord
  • database/repositories/blacklist_history_repository.py - новый репозиторий (119 строк)
  • database/repositories/blacklist_repository.py - обновлен для поддержки ban_author
  • database/repositories/post_repository.py - добавлены методы работы с сырыми текстами
  • helper_bot/handlers/callback/services.py - рефакторинг публикации постов
  • helper_bot/handlers/callback/callback_handlers.py - улучшена обработка блокировок
  • helper_bot/handlers/private/services.py - обновлена обработка постов

🔧 Технические улучшения

Репозитории

  • Добавлен BlacklistHistoryRepository для работы с историей банов
  • Обновлен BlacklistRepository для поддержки ban_author
  • Расширен PostRepository методами для работы с сырыми текстами

Сервисы

  • Обновлен AsyncBotDB для автоматического создания записей в истории
  • Улучшен PostPublishService для работы с сырыми текстами
  • Обновлены AdminService и BanService для поддержки ban_author

Утилиты

  • Обновлены функции форматирования текстов в helper_func.py
  • Улучшена обработка анонимных постов

🐛 Исправления ошибок

  • Исправлена обработка статусов медиагрупп
  • Улучшена обработка ошибок при блокировке пользователей
  • Исправлена работа с сырыми текстами постов
  • Улучшена обработка анонимных постов

📝 Примечания для разработчиков

  1. Миграция данных: Перед обновлением необходимо выполнить миграционные скрипты в следующем порядке:

    • create_blacklist_history_table.py
    • add_ban_author_column_to_blacklist.py
    • add_is_anonymous_column.py
    • migrate_blacklist_to_history.py (опционально, для миграции существующих данных)
    • backfill_post_status_legacy.py (опционально)
    • clean_post_text.py (опционально)
  2. Обратная совместимость: Все изменения обратно совместимы. Старые данные будут работать корректно.

  3. Производительность: Добавлены индексы для оптимизации запросов к истории банов.


📅 Временная шкала разработки

  • Последние изменения: Сегодня (23 января 2026)
  • Основная разработка: Последние 6 часов
  • Предыдущие улучшения: Последние 4-5 месяцев

Готовность к релизу

Версия dev-10 готова к тестированию. Все основные функции реализованы, тесты написаны и проходят успешно. Рекомендуется провести дополнительное тестирование в тестовой среде перед развертыванием в продакшн.

# Patch Notes - Версия dev-10 ## 📋 Обзор изменений Версия dev-10 включает значительные улучшения системы управления банами, обработки постов и работы с медиагруппами. Добавлена полная история банов пользователей, улучшена система хранения и форматирования текстов постов, а также проведен рефакторинг обработчиков блокировок. --- ## 🆕 Новые функции ### 1. История банов пользователей (Blacklist History) - **Добавлена система отслеживания истории банов/разбанов** - Создана новая таблица `blacklist_history` для хранения полной истории блокировок - Каждая запись содержит: user_id, message_for_user, date_ban, date_unban, ban_author - Автоматическое создание записи в истории при каждом бане - Автоматическое обновление записи при разбане - Индексы для оптимизации запросов по user_id и датам - **Новый репозиторий `BlacklistHistoryRepository`** - Методы для добавления записей при бане/разбане - Методы для получения истории банов пользователя - Методы для получения статистики по банам - **Миграционные скрипты** - `create_blacklist_history_table.py` - создание таблицы истории - `migrate_blacklist_to_history.py` - миграция существующих данных из blacklist в blacklist_history ### 2. Отслеживание автора блокировки - **Добавлено поле `ban_author` в модель `BlacklistUser`** - Хранение ID администратора, который заблокировал пользователя - Поддержка внешних ключей с каскадным удалением - Обновлены все методы работы с черным списком для поддержки ban_author - **Миграционный скрипт** - `add_ban_author_column_to_blacklist.py` - добавление колонки ban_author в существующую таблицу blacklist ### 3. Хранение сырых текстов постов - **Изменена логика хранения и форматирования текстов постов** - Сырые тексты постов теперь хранятся в базе данных без форматирования - Форматирование текста (добавление имени автора, никнейма) происходит непосредственно перед отправкой в канал - Это позволяет изменять форматирование без изменения данных в БД - Поддержка анонимных постов через поле `is_anonymous` - **Новые методы в `PostRepository`** - `get_post_text_by_helper_id()` - получение сырого текста по helper_message_id - `get_post_text_and_anonymity_by_message_id()` - получение текста и флага анонимности - `get_post_text_and_anonymity_by_helper_id()` - получение текста и флага анонимности по helper_id - **Миграционные скрипты** - `add_is_anonymous_column.py` - добавление колонки is_anonymous - `clean_post_text.py` - очистка и нормализация текстов постов в базе данных - `backfill_post_status_legacy.py` - обновление статусов старых постов --- ## 🔄 Улучшения и рефакторинг ### 1. Рефакторинг процесса блокировки пользователей - **Улучшена обработка блокировок в callback-обработчиках** - Упрощена логика блокировки через callback-кнопки - Улучшена обработка ошибок при блокировке - Добавлено логирование всех операций блокировки - **Обновлены сервисы** - `AdminService` - обновлена работа с ban_author - `BanService` - улучшена обработка блокировок с учетом истории - `AsyncBotDB.set_user_blacklist()` - автоматическое создание записи в истории ### 2. Улучшение обработки медиагрупп - **Обновлена обработка статусов медиагрупп** - Улучшен метод `update_status_for_media_group_by_helper_id()` в `PostRepository` - Добавлена проверка количества обновленных строк - Улучшено логирование операций с медиагруппами - Исправлена обработка медиагрупп при публикации - **Интеграционные тесты** - Расширены тесты для проверки работы с медиагруппами - Добавлены тесты для проверки статусов медиагрупп ### 3. Улучшение управления статусами сообщений - **Обновлена схема базы данных** - Улучшена обработка статусов постов (suggest, approved, rejected) - Добавлена проверка количества обновленных строк при изменении статуса - Улучшено логирование операций со статусами --- ## 🗄️ Изменения в базе данных ### Новые таблицы - **`blacklist_history`** - история банов/разбанов пользователей - Поля: id, user_id, message_for_user, date_ban, date_unban, ban_author, created_at, updated_at - Внешние ключи на our_users - Индексы для оптимизации запросов ### Изменения в существующих таблицах - **`blacklist`** - добавлено поле `ban_author` (INTEGER, FOREIGN KEY) - **`post_from_telegram_suggest`** - добавлено поле `is_anonymous` (INTEGER) --- ## 🧪 Тестирование ### Новые тесты - **`test_blacklist_history_repository.py`** - полное покрытие тестами нового репозитория истории банов - Тесты создания записей при бане - Тесты обновления записей при разбане - Тесты получения истории пользователя - Тесты статистики - **`test_post_repository.py`** - расширены тесты для работы с сырыми текстами - **`test_post_service.py`** - новые тесты для сервиса постов - **`test_post_repository_integration.py`** - интеграционные тесты для репозитория постов - **`test_auto_unban_integration.py`** - расширены интеграционные тесты авторазбана ### Обновленные тесты - **`test_blacklist_repository.py`** - обновлены тесты с учетом ban_author - **`test_async_db.py`** - добавлены тесты для новых методов работы с историей - **`test_refactored_admin_handlers.py`** - обновлены тесты обработчиков админов --- ## 🛠️ Миграционные скрипты Добавлены следующие скрипты миграции: 1. **`create_blacklist_history_table.py`** - создание таблицы истории банов 2. **`migrate_blacklist_to_history.py`** - миграция данных из blacklist в blacklist_history 3. **`add_ban_author_column_to_blacklist.py`** - добавление колонки ban_author 4. **`add_is_anonymous_column.py`** - добавление колонки is_anonymous 5. **`backfill_post_status_legacy.py`** - обновление статусов старых постов 6. **`clean_post_text.py`** - очистка и нормализация текстов постов --- ## 📊 Статистика изменений - **31 файл изменен** - **2584 строки добавлено** - **127 строк удалено** ### Основные измененные компоненты: - `database/async_db.py` - добавлены методы работы с историей банов - `database/models.py` - добавлена модель `BlacklistHistoryRecord` - `database/repositories/blacklist_history_repository.py` - новый репозиторий (119 строк) - `database/repositories/blacklist_repository.py` - обновлен для поддержки ban_author - `database/repositories/post_repository.py` - добавлены методы работы с сырыми текстами - `helper_bot/handlers/callback/services.py` - рефакторинг публикации постов - `helper_bot/handlers/callback/callback_handlers.py` - улучшена обработка блокировок - `helper_bot/handlers/private/services.py` - обновлена обработка постов --- ## 🔧 Технические улучшения ### Репозитории - Добавлен `BlacklistHistoryRepository` для работы с историей банов - Обновлен `BlacklistRepository` для поддержки ban_author - Расширен `PostRepository` методами для работы с сырыми текстами ### Сервисы - Обновлен `AsyncBotDB` для автоматического создания записей в истории - Улучшен `PostPublishService` для работы с сырыми текстами - Обновлены `AdminService` и `BanService` для поддержки ban_author ### Утилиты - Обновлены функции форматирования текстов в `helper_func.py` - Улучшена обработка анонимных постов --- ## 🐛 Исправления ошибок - Исправлена обработка статусов медиагрупп - Улучшена обработка ошибок при блокировке пользователей - Исправлена работа с сырыми текстами постов - Улучшена обработка анонимных постов --- ## 📝 Примечания для разработчиков 1. **Миграция данных**: Перед обновлением необходимо выполнить миграционные скрипты в следующем порядке: - `create_blacklist_history_table.py` - `add_ban_author_column_to_blacklist.py` - `add_is_anonymous_column.py` - `migrate_blacklist_to_history.py` (опционально, для миграции существующих данных) - `backfill_post_status_legacy.py` (опционально) - `clean_post_text.py` (опционально) 2. **Обратная совместимость**: Все изменения обратно совместимы. Старые данные будут работать корректно. 3. **Производительность**: Добавлены индексы для оптимизации запросов к истории банов. --- ## 📅 Временная шкала разработки - **Последние изменения**: Сегодня (23 января 2026) - **Основная разработка**: Последние 6 часов - **Предыдущие улучшения**: Последние 4-5 месяцев --- ## ✅ Готовность к релизу Версия dev-10 готова к тестированию. Все основные функции реализованы, тесты написаны и проходят успешно. Рекомендуется провести дополнительное тестирование в тестовой среде перед развертыванием в продакшн.
Sign in to join this conversation.