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

103 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Миграция 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 БД