Разработка на NodeJS
Создать бекенд для игры крестики-нолики для игры против компьютера. Приложение должно быть реализовано на следующих технологиях:
- back-end: один из популярных фреимверков express/koa/loopback/sails/etc
- DB: mongodb
- использование ES6 стандарта или выше
Стратегия компьютера должна быть реализована в Node.JS коде. Результаты игр, статистика побед и история ходов должны храниться в базе данных.
Игра может быть анонимной, т.е. без необходимости пользователю регистрироваться.
Для работы сервиса требуется наличие конфигурационного файла в директории ./config
.
В зависимости от переменной окружения process.env.NODE_ENV
, будет использоваться
файл настроек, например development.js
, production.js
. Если настройки в файле не,
то настройка будет браться из файла config/default.js
.
Шаблон настроек можно посмотреть в config/default.js
, он состоит из:
mongoDb
- настройки подключения к БДserver
- настройки web serverapi
- настройки API сервисаgraylog
- настройки логирования
Для запуска сервиса в режиме разработки, требуется выполнить команду 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
и потестировать можно по адресу 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
.
Сервис состоит из:
Web server который реализует API
сервиса. Используется Koa
и Swagger
.
Коннектор к базе MongoDB
используется нативный драйвер.
Модуль логирования, в котором можно установить provider
логирования.
По умолчанию это console
, если указаны все настройки graylog
, то в качестве
провайдера используется клиент graylog
.
Движок игры, в котором реализована вся логика игры, состояние игры, простой AI
.
Менеджер игр, в котором содержатся не завершенные игры. Менеджер осуществляет рассылку изменения игр подписчикам. Является кэшем между Клиентом и БД. После того как игра завершается, она удаляется из менеджера игр.