Добавлена документация и скрипты для работы с БД
- Удалены лишние .gitignore из подпапок (теперь один общий в корне) - Добавлен import_db.sh для импорта базы данных - Создана документация: docs/ARCHITECTURE.md для разработчиков - Создана документация: docs/USER_GUIDE.md для пользователей - Обновлен .gitignore для исключения временных файлов
This commit is contained in:
parent
6cb5a9b99f
commit
e8ced9bca7
7 changed files with 418 additions and 140 deletions
132
docs/ARCHITECTURE.md
Normal file
132
docs/ARCHITECTURE.md
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
# Архитектура проекта Lichess Statistics Ecosystem
|
||||
|
||||
## Обзор проекта
|
||||
|
||||
Проект состоит из трех основных компонентов:
|
||||
|
||||
1. **LichessWebServices** - REST API для получения статистики с Lichess
|
||||
2. **LichessClientTG_bot** - Telegram бот для отслеживания игроков
|
||||
3. **LichessWebView** - Веб-интерфейс для просмотра пользователей и игроков
|
||||
|
||||
## Структура базы данных
|
||||
|
||||
### Таблицы
|
||||
|
||||
#### telegram_users
|
||||
Хранит информацию о пользователях Telegram бота.
|
||||
|
||||
```sql
|
||||
CREATE TABLE telegram_users (
|
||||
user_id INTEGER PRIMARY KEY, -- ID пользователя в Telegram
|
||||
username TEXT, -- @username
|
||||
first_name TEXT, -- Имя
|
||||
last_name TEXT, -- Фамилия
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
#### gamers
|
||||
Хранит информацию о игроках Lichess (уникальные).
|
||||
|
||||
```sql
|
||||
CREATE TABLE gamers (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT UNIQUE NOT NULL, -- Username на Lichess
|
||||
token TEXT, -- DEPRECATED: старый глобальный токен
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
**Важно:** Поле `token` в таблице `gamers` больше не используется. Токены хранятся в `user_gamers`.
|
||||
|
||||
#### user_gamers
|
||||
Связывает пользователей Telegram с игроками Lichess. Хранит индивидуальные настройки.
|
||||
|
||||
```sql
|
||||
CREATE TABLE user_gamers (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL, -- ID пользователя Telegram
|
||||
gamer_id INTEGER NOT NULL, -- ID игрока Lichess
|
||||
token TEXT, -- Lichess API token для этого пользователя+игрока
|
||||
is_active BOOLEAN DEFAULT FALSE, -- Активен ли игрок для пользователя
|
||||
period_minutes INTEGER DEFAULT 0, -- Период уведомлений (0 = отключено)
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES telegram_users(user_id),
|
||||
FOREIGN KEY (gamer_id) REFERENCES gamers(id),
|
||||
UNIQUE(user_id, gamer_id)
|
||||
);
|
||||
```
|
||||
|
||||
### Ключевая особенность
|
||||
|
||||
Один пользователь может отслеживать несколько игроков, и у каждого пользователя **свой** активный игрок. Токены хранятся **отдельно для каждой пары** пользователь-игрок.
|
||||
|
||||
## Поток данных
|
||||
|
||||
### 1. Добавление игрока (`/adduser`)
|
||||
|
||||
```
|
||||
Пользователь → /adduser → Ввод токена → Ввод username →
|
||||
database.add_gamer(username) → database.add_user_gamer(user_id, gamer_id, token)
|
||||
```
|
||||
|
||||
### 2. Получение статистики (`/today`, `/yesterday`, `/week`)
|
||||
|
||||
```
|
||||
Пользователь → /today → database.get_user_active_gamer(user_id) →
|
||||
lichess_api.get_stats(username, token) → Отправка в Telegram
|
||||
```
|
||||
|
||||
### 3. Периодические уведомления
|
||||
|
||||
```
|
||||
Периодическая задача → database.get_all_gamers_with_periods() →
|
||||
Для каждой пары (user_id, gamer_id):
|
||||
lichess_api.get_stats(username, token из user_gamers) →
|
||||
Проверка изменений → Отправка уведомления
|
||||
```
|
||||
|
||||
## Миграция токенов
|
||||
|
||||
При старте бота автоматически запускается `_migrate_tokens_from_gamers()`:
|
||||
|
||||
1. Проверяет есть ли токены в `gamers.token`
|
||||
2. Если есть и их нет в `user_gamers.token`, переносит их
|
||||
3. Логирует сколько токенов перенесено
|
||||
|
||||
Это нужно для перехода со старой схемы (глобальный токен) на новую (токен на пару).
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Lichess Web Services
|
||||
|
||||
- `GET /api/user_ratings/{username}` - Получить рейтинги игрока
|
||||
- `GET /api/user_stats/{username}?start_date={date}&end_date={date}&token={token}` - Статистика за период
|
||||
- `GET /health` - Health check
|
||||
|
||||
## Команды бота
|
||||
|
||||
- `/start` - Приветствие и регистрация пользователя
|
||||
- `/adduser` - Добавить игрока для отслеживания
|
||||
- `/getgamers` - Выбрать активного игрока
|
||||
- `/today` - Статистика за сегодня
|
||||
- `/yesterday` - Статистика за вчера
|
||||
- `/week` - Статистика за неделю
|
||||
- `/setperiod` - Настроить периодические уведомления
|
||||
|
||||
## Docker Compose
|
||||
|
||||
Все три сервиса запускаются через единый `docker-compose.yml`:
|
||||
|
||||
- **lichess-api**: API на порту 8001
|
||||
- **lichess-telegram-bot**: Бот (host network)
|
||||
- **lichess-web-view**: Веб-интерфейс на порту 5000
|
||||
|
||||
База данных монтируется как bind mount: `./LichessClientTG_bot/data:/app/data`
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Токены Lichess API хранятся в базе данных и используются только для запросов к Lichess
|
||||
- Веб-интерфейс работает **без пароля** - доступен всем кто знает URL
|
||||
- Telegram бот токен хранится в `config.py` (можно вынести в `.env`)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue