| .. | ||
| prisma | ||
| src | ||
| test | ||
| .env.example | ||
| .gitignore | ||
| .prettierrc | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| nest-cli.json | ||
| package-lock.json | ||
| package.json | ||
| prisma.config.ts | ||
| README.md | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
Backend - "100 к 1" Multiplayer Game
NestJS backend для мультиплеерной игры "100 к 1" с WebSocket поддержкой.
🚀 Быстрый старт
Предварительные требования
- Node.js 18+
- PostgreSQL 15+
- Docker (опционально, для запуска PostgreSQL в контейнере)
Установка
# 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 - история завершённых игр
Миграции
# Создать новую миграцию
npx prisma migrate dev --name migration_name
# Применить миграции на production
npx prisma migrate deploy
# Сбросить базу данных (ВНИМАНИЕ: удалит все данные!)
npx prisma migrate reset
Seed данные
Seed скрипт создаёт:
- Демо пользователя
- 2 пака вопросов (общие и семейные)
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
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
# Запустить всё (PostgreSQL + Backend)
docker-compose up -d
# Остановить
docker-compose down
# Просмотр логов
docker-compose logs -f backend
# Пересобрать и запустить
docker-compose up -d --build
Запуск только PostgreSQL
docker-compose up -d postgres
🔐 Переменные окружения
Создайте файл .env на основе .env.example
📝 Prisma Studio
npx prisma studio
Откроется на http://localhost:5555
🚀 Production Deployment
# 1. Собрать проект
npm run build
# 2. Применить миграции
npx prisma migrate deploy
# 3. Запустить
npm run start:prod