mnemo_cards/mnemo_cards_telegram_bot/MIGRATION.md

104 lines
4.8 KiB
Markdown
Raw Normal View 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` для токена бота
## Настройка
### Переменные окружения
**Бэкенд:**
```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 БД