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