# Миграция 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` для токена бота ## Настройка ### Переменные окружения **Бэкенд:** ```bash TELEGRAM_BOT_API_KEY=your-secret-api-key-here ``` **Бот (все обязательны):** ```bash 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` бота определены переменные окружения: ```dockerfile ENV BACKEND_URL=https://api.mnemo-cards.online \ BOT_SHARE_DAILY_LIMIT=1 \ TELEGRAM_BOT_API_KEY= \ TELEGRAM_BOT_TOKEN= ``` Установите значения при запуске контейнера: ```bash 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 БД