mnemo_cards/mnemo_cards_telegram_bot/MIGRATION.md
Dmitry a92cade04f
Some checks failed
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Has been cancelled
Return debug info in API response for admin auth errors
This will show the exact reason for token verification failure
2025-12-12 01:05:05 +03:00

4.8 KiB
Raw Permalink Blame History

Миграция Telegram бота с Isar DB на Backend API

Обзор

Telegram бот был мигрирован с прямого доступа к Isar базе данных на использование Backend API через HTTP запросы. Это обеспечивает:

  • Централизованное управление данными
  • Упрощение развертывания (не нужна локальная БД)
  • Единую точку доступа к данным

Изменения

Бэкенд

  1. Middleware для API ключа (telegram_bot_auth_middleware.dart)

    • Проверяет заголовок X-API-Key
    • Использует переменную окружения TELEGRAM_BOT_API_KEY
  2. API эндпоинты для бота (telegram_bot_api_v2.dart)

    • GET /api/v2/telegram-bot/random-card - получить случайную карточку
    • POST /api/v2/telegram-bot/share/check-limit - проверить лимит шаринга
    • POST /api/v2/telegram-bot/share/record - записать факт шаринга
    • GET /api/v2/telegram-bot/users/info - информация о пользователях
    • GET /api/v2/telegram-bot/words - список всех слов

Телеграм бот

  1. HTTP клиент (backend_client.dart)

    • Заменяет DBManager
    • Поддерживает retry логику с экспоненциальной задержкой
    • Использует API ключ для аутентификации
  2. Удалены зависимости

    • Удалена зависимость isar из pubspec.yaml
    • Удалена зависимость args из pubspec.yaml (CLI аргументы больше не используются)
    • Удален файл db_manager.dart
    • Удалена опция --isar из конфигурации
  3. Конфигурация через переменные окружения

    • CLI аргументы заменены на переменные окружения
    • Все настройки теперь читаются из Platform.environment
    • Добавлена переменная TELEGRAM_BOT_TOKEN для токена бота

Настройка

Переменные окружения

Бэкенд:

TELEGRAM_BOT_API_KEY=your-secret-api-key-here

Бот (все обязательны):

TELEGRAM_BOT_TOKEN=your-telegram-bot-token  # Токен бота от BotFather
TELEGRAM_BOT_API_KEY=your-secret-api-key-here  # Должен совпадать с бэкендом
BACKEND_URL=https://api.mnemo-cards.online  # Опционально, по умолчанию используется значение по умолчанию
BOT_SHARE_DAILY_LIMIT=1  # Опционально, по умолчанию 1

Примечание: Бот теперь использует только переменные окружения. CLI аргументы больше не поддерживаются.

Docker

В Dockerfile бота определены переменные окружения:

ENV BACKEND_URL=https://api.mnemo-cards.online \
    BOT_SHARE_DAILY_LIMIT=1 \
    TELEGRAM_BOT_API_KEY= \
    TELEGRAM_BOT_TOKEN=

Установите значения при запуске контейнера:

docker run \
  -e TELEGRAM_BOT_TOKEN=your-bot-token \
  -e TELEGRAM_BOT_API_KEY=your-api-key \
  ...

Использование

Бот работает так же, как и раньше, но теперь все операции выполняются через API:

  • /start, /login, /code - генерация кодов авторизации
  • /share - шаринг карточек с проверкой лимитов
  • /info, /user, /words - административные команды

Все данные теперь хранятся и обрабатываются на бэкенде.

Безопасность

  • API ключ передается через заголовок X-API-Key
  • Ключ должен быть достаточно длинным и случайным
  • Рекомендуется использовать переменные окружения, а не хардкодить ключ
  • API ключ должен совпадать в бэкенде и боте

Откат

Если нужно вернуться к использованию Isar:

  1. Восстановите файл db_manager.dart из git истории
  2. Верните зависимость isar в pubspec.yaml
  3. Замените BackendClient на DBManager в main.dart
  4. Обновите конфигурацию для использования пути к Isar БД