Skip to content

Latest commit

 

History

History
103 lines (80 loc) · 5.87 KB

File metadata and controls

103 lines (80 loc) · 5.87 KB

План имплементации: Обработка Telegram сообщений из каналов

Этап 1: Подготовка и анализ ✅

  • Изучить текущую структуру TelegramController
  • Проанализировать текущую логику обработки webhook
  • Изучить документацию по telegram-bot gem для работы с каналами

Этап 2: Создание модели ChannelMessage ✅

  • Создать модель ChannelMessage через rails g model ChannelMessage
  • Добавить поля в миграцию согласно спецификации
  • Добавить индексы для оптимизации запросов
  • Настроить валидации в модели
  • Добавить scope методы для удобной выборки
  • Запустить миграцию

Этап 3: Тестирование модели ChannelMessage ✅

  • Создать тесты для валидаций модели
  • Создать тесты для scope методов
  • Создать тесты для сохранения различных типов контента
  • Создать тесты для уникальности (message_id, channel_id)
  • Убедиться что все тесты проходят

Этап 4: Модификация TelegramController ✅

  • Изучить текущую структуру метода process webhook
  • Добавить метод определения типа сообщения (direct/channel)
  • Создать метод сохранения канальных сообщений
  • Модифицировать основной flow для разделения обработки
  • Добавить обработку ошибок сохранения канальных сообщений

Этап 5: Тестирование TelegramController ✅

  • Создать тесты для определения типа сообщения
  • Создать тесты для сохранения канальных сообщений
  • Создать тесты что бот не отвечает на канальные сообщения
  • Создать тесты что прямые сообщения обрабатываются как раньше
  • Создать тесты для обработки различных типов контента из каналов
  • Создать тесты обработки ошибок

Этап 6: Интеграционное тестирование ✅

  • Создать тесты полного flow обработки webhook с канальным сообщением
  • Создать тесты проверки что ответы не отправляются в каналы
  • Создать тесты для различных форматов контента (фото, видео, документы)
  • Тестировать с реальными данными webhook от Telegram

Этап 7: Оптимизация и мониторинг ✅

  • Добавить логирование сохраненных канальных сообщений
  • Добавить метрики для мониторинга (Bugsnag интеграция)
  • Оптимизировать производительность сохранения
  • Добавить обработку дубликатов сообщений (индекс)

Этап 8: Финальная проверка ✅

  • Запустить полный тестовый набор
  • Проверить работу в development среде
  • Выполнить RuboCop для всех измененных файлов
  • Обновить документацию при необходимости
  • Создать git commit с изменениями

Тестовые сценарии для реализации

Сценарий 1: Базовое сохранение текстового сообщения из канала

# Given: Webhook с текстовым сообщением из канала
# When: Обрабатываем webhook
# Then: Сообщение сохраняется в channel_messages, ответ не отправляется

Сценарий 2: Проверка разных типов контента

# Given: Webhook с фото/видео/документом из канала
# When: Обрабатываем webhook
# Then: Контент корректно сохраняется с правильным message_type

Сценарий 3: Игнорирование канальных сообщений

# Given: Webhook с сообщением из канала
# When: Обрабатываем webhook
# Then: Никакие методы ответа не вызываются

Сценарий 4: Прямые сообщения работают как раньше

# Given: Webhook с прямым сообщением пользователя
# When: Обрабатываем webhook
# Then: Сообщение обрабатывается стандартной логикой

Критерии выполнения

  • Все канальные сообщения сохраняются в базу данных
  • Бот не отвечает на сообщения из каналов
  • Прямые сообщения обрабатываются без изменений
  • Все тесты проходят (минимум 90% покрытие)
  • Код соответствует RuboCop стандартам
  • Производительность не ухудшается
  • Ошибки сохранения логируются в Bugsnag