Skip to content

Решение тестового задания по бэкенду от VK

Notifications You must be signed in to change notification settings

trofimovdev/vk_chess

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Задача: написать бэкенд для проведения шахматной партии.

Что требуется:

  • язык PHP,
  • использовать ООП,
  • хранить состояние партии (положение фигур на доске и очередность хода),
  • проверять ход на соответствие правилам,
  • определять конец игры,
  • написать API:
  • cделать ход,
  • cтатус партии,
  • начать новую партию,
  • продумать какие типы ошибок могут быть.

Что должно получится на выходе: веб-сервис, который дает возможность провести шахматную партию, используя обозначенные выше методы API.

Что НЕ надо делать:

  • вычислять патовую ситуацию,
  • визуализацию.

Решение

Я решил, что использовать фреймворк для трех эндпоинтов нерационально, поэтому все написано на native PHP 7.4, зависимости через Composer.

В качестве БД используется Postgres, доска с фигурами хранится в JSONB. При вызове методов берется конкретная запись игры (т.е. ищется точное совпадение id), поэтому поиск можно оптимизировать с помощью хеш-индексов вместо стандартного B-tree.

Эндпоинты

  • /create — создать новую игры,
  • /move — сделать ход,
  • /status — получить статус партии.

Документация на Postman

Реализованный функционал:

Прототип развернут на chess.trofimov.dev, сыграть простую партию и поставить «Дурацкий мат» можно с помощью готового набора ссылок:

  1. https://chess.trofimov.dev/create — создаем новую игру, далее в качестве {id} подставляем значение из ответа
  2. https://chess.trofimov.dev/move?id={id}&from=g2&to=g4 — ходим g2-g4 за белых
  3. https://chess.trofimov.dev/move?id={id}&from=e7&to=e5 — ходим e7-e5 за черных
  4. https://chess.trofimov.dev/move?id={id}&from=f2&to=f3 — ходим f2-f3 за белых
  5. https://chess.trofimov.dev/move?id={id}&from=d8&to=h4 — ходим Фd8-h4× за черных

Установка

Необходим PHP 7.4, Postgres (10+ для использования хеш-индексов, т.к. до этой версии их использование не гарантирует целостность данных при сбое), настроить проксирование запросов к /index.php (у меня Nginx с PHP-FPM, конфиг в папке scripts/) и заполнить данные от БД в .env файле.

git clone https://github.com/trofimovdev/vk_chess.git && cd vk_chess
composer install
psql -U {db_user} {db_name} < scripts/dump.sql
cp .env.example .env

About

Решение тестового задания по бэкенду от VK

Resources

Stars

Watchers

Forks

Languages