sto-k-odnomu/backend/README.md
2026-01-03 17:07:04 +03:00

209 lines
6.4 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.

# 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
```