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

6.4 KiB
Raw Blame History

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