107 lines
3.7 KiB
Markdown
107 lines
3.7 KiB
Markdown
# Система авторизации и Leaderboard
|
||
|
||
## Описание
|
||
|
||
Игра теперь поддерживает систему авторизации/регистрации и глобальный рейтинг (Leaderboard) с использованием Redis в качестве базы данных.
|
||
|
||
## Режимы работы
|
||
|
||
### 1. Без Redis (для тестов)
|
||
По умолчанию приложение работает **без Redis**. Это позволяет тестировать игру без необходимости настройки базы данных.
|
||
|
||
**Как запустить без Redis:**
|
||
- Просто запустите `node server.js` или `npm start`
|
||
- Или установите переменную окружения: `USE_REDIS=false`
|
||
|
||
### 2. С Redis (для продакшена)
|
||
Для использования авторизации, регистрации и Leaderboard необходимо запустить Redis.
|
||
|
||
**Как запустить с Redis:**
|
||
|
||
#### Локально:
|
||
1. Установите Redis: `sudo apt-get install redis-server` (Debian/Ubuntu)
|
||
2. Запустите Redis: `redis-server`
|
||
3. Установите переменные окружения:
|
||
```bash
|
||
export USE_REDIS=true
|
||
export REDIS_URL=redis://localhost:6379
|
||
```
|
||
4. Запустите сервер: `node server.js`
|
||
|
||
#### Docker:
|
||
1. Используйте `docker-compose.yml` - Redis уже настроен
|
||
2. Запустите: `docker compose up -d`
|
||
3. Redis автоматически подключится
|
||
|
||
## Переменные окружения
|
||
|
||
Создайте файл `.env` на основе `.env.example`:
|
||
|
||
```bash
|
||
USE_REDIS=true # Использовать Redis (true/false)
|
||
REDIS_URL=redis://redis:6379 # URL Redis (для Docker: redis://redis:6379)
|
||
SESSION_SECRET=your-secret-key # Секретный ключ для сессий
|
||
PORT=3542 # Порт сервера
|
||
NODE_ENV=production # Окружение
|
||
```
|
||
|
||
## Deploy.sh
|
||
|
||
Скрипт `deploy.sh` автоматически:
|
||
1. Останавливает Redis контейнер
|
||
2. Обновляет код из Git
|
||
3. Останавливает все контейнеры
|
||
4. Собирает образы
|
||
5. Запускает контейнеры (включая Redis)
|
||
|
||
**Использование:**
|
||
```bash
|
||
chmod +x deploy.sh
|
||
./deploy.sh
|
||
```
|
||
|
||
## API Endpoints
|
||
|
||
### Регистрация
|
||
```
|
||
POST /api/register
|
||
Body: { username: string, password: string, email?: string }
|
||
```
|
||
|
||
### Вход
|
||
```
|
||
POST /api/login
|
||
Body: { username: string, password: string }
|
||
```
|
||
|
||
### Выход
|
||
```
|
||
POST /api/logout
|
||
```
|
||
|
||
### Информация о пользователе
|
||
```
|
||
GET /api/user
|
||
```
|
||
|
||
### Leaderboard
|
||
```
|
||
GET /api/leaderboard
|
||
Response: { leaderboard: [{ username, gamesPlayed, gamesWon, winRate, totalDamage, totalHealing }] }
|
||
```
|
||
|
||
## Статистика игроков
|
||
|
||
Статистика автоматически обновляется при окончании игры:
|
||
- `gamesPlayed` - количество сыгранных игр
|
||
- `gamesWon` - количество побед
|
||
- `totalDamage` - общий нанесенный урон
|
||
- `totalHealing` - общее восстановленное здоровье
|
||
|
||
## UI
|
||
|
||
- **Модальное окно авторизации** появляется при первом запуске
|
||
- Можно продолжить без авторизации (кнопка "Продолжить без авторизации")
|
||
- **Кнопка Leaderboard** в правом верхнем углу лобби
|
||
- **Информация о пользователе** отображается в левом верхнем углу (если авторизован)
|