sto-k-odnomu/backend/README.md

210 lines
6.4 KiB
Markdown
Raw Normal View History

2026-01-03 14:07:04 +00:00
# Backend - "100 к 1" Multiplayer Game
NestJS backend для мультиплеерной игры "100 к 1" с WebSocket поддержкой.
## 🚀 Быстрый старт
### Предварительные требования
- Node.js 18+
- PostgreSQL 15+
- Docker (опционально, для запуска PostgreSQL в контейнере)
### Установка
```bash
# 1. Установить зависимости
npm install
# 2. Настроить переменные окружения
cp .env.example .env
# Отредактировать .env с вашими настройками
# 3. Запустить PostgreSQL
# Вариант A: Использовать Docker Compose
docker-compose up -d postgres
# Вариант B: Использовать локальный PostgreSQL
# Создать базу данных вручную:
# createdb sto_k_odnomu
# 4. Выполнить миграции
npx prisma migrate dev --name init
# 5. Заполнить демо-данными (опционально)
npm run prisma:seed
# 6. Сгенерировать Prisma Client
npx prisma generate
# 7. Запустить backend
npm run start:dev
```
Backend запустится на http://localhost:3000
## 📁 Структура проекта
```
backend/
├── src/
│ ├── auth/ # Модуль авторизации (JWT, анонимные пользователи)
│ ├── rooms/ # Модуль комнат (создание, присоединение)
│ ├── questions/ # Модуль паков вопросов (CRUD)
│ ├── game/ # WebSocket модуль (real-time игра)
│ ├── stats/ # Модуль статистики (история игр)
│ ├── prisma/ # Prisma сервис
│ ├── app.module.ts # Главный модуль
│ └── main.ts # Точка входа
├── prisma/
│ ├── schema.prisma # Схема базы данных
│ └── seed.ts # Seed скрипт с демо-данными
├── Dockerfile # Docker конфигурация
├── docker-compose.yml # Docker Compose (PostgreSQL + Backend)
└── .env.example # Пример переменных окружения
```
## 🗄️ База данных
### Модели
- **User** - пользователи (анонимные или зарегистрированные)
- **Room** - игровые комнаты
- **Participant** - участники комнат (игроки, ведущие, зрители)
- **QuestionPack** - паки вопросов
- **GameHistory** - история завершённых игр
### Миграции
```bash
# Создать новую миграцию
npx prisma migrate dev --name migration_name
# Применить миграции на production
npx prisma migrate deploy
# Сбросить базу данных (ВНИМАНИЕ: удалит все данные!)
npx prisma migrate reset
```
### Seed данные
Seed скрипт создаёт:
- Демо пользователя
- 2 пака вопросов (общие и семейные)
```bash
npm run prisma:seed
```
## 🔌 API Endpoints
### Auth
- POST /auth/anonymous - создать анонимного пользователя
- POST /auth/register - регистрация
- POST /auth/login - вход
### Rooms
- POST /rooms - создать комнату
- GET /rooms/:code - получить комнату по коду
- POST /rooms/:roomId/join - присоединиться к комнате
### Questions
- POST /questions/packs - создать пак вопросов
- GET /questions/packs - получить все паки
- GET /questions/packs/:id - получить пак по ID
- PUT /questions/packs/:id - обновить пак
- DELETE /questions/packs/:id - удалить пак
### Stats
- POST /stats/game-history - сохранить историю игры
- GET /stats/game-history/:userId - получить историю пользователя
- GET /stats/user/:userId - получить статистику пользователя
## 🌐 WebSocket Events
### Client → Server
- joinRoom - присоединиться к комнате
- startGame - начать игру
- revealAnswer - открыть ответ
- updateScore - обновить счёт
- nextQuestion - следующий вопрос
- endGame - завершить игру
### Server → Client
- roomUpdate - обновление комнаты
- gameStarted - игра началась
- answerRevealed - ответ открыт
- scoreUpdated - счёт обновлён
- questionChanged - вопрос изменён
- gameEnded - игра завершена
## 🔧 NPM Scripts
```bash
npm run start # Запуск в production режиме
npm run start:dev # Запуск в dev режиме с hot reload
npm run start:debug # Запуск в debug режиме
npm run build # Сборка для production
npm run lint # Проверка ESLint
npm run format # Форматирование кода (Prettier)
npm run test # Запуск тестов
npm run test:watch # Запуск тестов в watch режиме
npm run test:cov # Запуск тестов с coverage
npm run prisma:generate # Генерация Prisma Client
npm run prisma:migrate # Создание и применение миграции
npm run prisma:seed # Заполнение БД демо-данными
```
## 🐳 Docker
### Запуск с Docker Compose
```bash
# Запустить всё (PostgreSQL + Backend)
docker-compose up -d
# Остановить
docker-compose down
# Просмотр логов
docker-compose logs -f backend
# Пересобрать и запустить
docker-compose up -d --build
```
### Запуск только PostgreSQL
```bash
docker-compose up -d postgres
```
## 🔐 Переменные окружения
Создайте файл .env на основе .env.example
## 📝 Prisma Studio
```bash
npx prisma studio
```
Откроется на http://localhost:5555
## 🚀 Production Deployment
```bash
# 1. Собрать проект
npm run build
# 2. Применить миграции
npx prisma migrate deploy
# 3. Запустить
npm run start:prod
```