Skip to content

jirufik/ticTacToeService

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание:

Разработка на NodeJS

Создать бекенд для игры крестики-нолики для игры против компьютера. Приложение должно быть реализовано на следующих технологиях:

  • back-end: один из популярных фреимверков express/koa/loopback/sails/etc
  • DB: mongodb
  • использование ES6 стандарта или выше

Стратегия компьютера должна быть реализована в Node.JS коде. Результаты игр, статистика побед и история ходов должны храниться в базе данных.

Игра может быть анонимной, т.е. без необходимости пользователю регистрироваться.

config

Для работы сервиса требуется наличие конфигурационного файла в директории ./config. В зависимости от переменной окружения process.env.NODE_ENV, будет использоваться файл настроек, например development.js, production.js. Если настройки в файле не, то настройка будет браться из файла config/default.js.

Шаблон настроек можно посмотреть в config/default.js, он состоит из:

  • mongoDb - настройки подключения к БД
  • server - настройки web server
  • api - настройки API сервиса
  • graylog - настройки логирования

dev разработка

Для запуска сервиса в режиме разработки, требуется выполнить команду npm run start:local. При удачном запуске выведутся сообщения:

NODE_ENV: development
server is running on the port: 3000

Запуск сервиса

Для запуска сервиса в режиме production, требуется:

  • Собрать проект npm run build
  • Запустить проект npm run start

При удачном запуске выведутся сообщения:

NODE_ENV: production
server is running on the port: 3000

REST API

Посмотреть описание REST API и потестировать можно по адресу http://localhost:3000/api-docs

Пример игры:

  • Создаем первого игрока, робота POST http://localhost:3000/v1/players. name = RobotPlayer, isAI = true
  • Создаем второго игрока, человека POST http://localhost:3000/v1/players. name = RobotPlayer, isAI = false
  • Создаем новую игру, POST http://localhost:3000/v1/games. Указываем id игроков и размер поля. firstPlayerId = 5f786a5f9efed03dadf415a2, secondPlayerId = 5f786ac59efed03dadf415a3, gameBoardSize = 3
  • По long polling можно подписаться на обновления игры GET http://localhost:3000/v1/subscriptions/5f786b4e9efed03dadf415a4
  • Делаем ход POST http://localhost:3000/v1/games/5f786b4e9efed03dadf415a4. Указав id игрока playerId = 5f786ac59efed03dadf415a3, номер игровой площади, которую занимает игрок numberOnGameBoard, номер ревизии revision = 1 (защита состоянии игры, с каждым ходом ревизия увеличивается на 1)

Тесты

Для выполнения тестов требуется выполнить команду npm run test. Т.к. это тестовое задание, то интеграционные тесту отсутствуют, модульным тестами покрыт лишь один класс src/gameEngine/playingArea/unit.test.js.

Устройство сервиса

Сервис состоит из:

server

Web server который реализует API сервиса. Используется Koa и Swagger.

mongoDbConnector

Коннектор к базе MongoDB используется нативный драйвер.

logger

Модуль логирования, в котором можно установить provider логирования. По умолчанию это console, если указаны все настройки graylog, то в качестве провайдера используется клиент graylog.

gameEngine

Движок игры, в котором реализована вся логика игры, состояние игры, простой AI.

gameManager

Менеджер игр, в котором содержатся не завершенные игры. Менеджер осуществляет рассылку изменения игр подписчикам. Является кэшем между Клиентом и БД. После того как игра завершается, она удаляется из менеджера игр.

Releases

No releases published

Packages

No packages published