Задача:

Сверстать CRUD-интерфейс для редактирования базы данных игр.

Есть бекэнд, написанный на php, работающий с "базой данных" на json.

База данных лежит в файле database.json. В файле database.1.json лежит "бекап" - копия начальной базы данных, если что-то пойдет не так, скопируйте оттуда данные в основную БД.

Ручки, которые предоставляет бекэнд (формат - тип запроса url)

GET /api/list.php

Просто список всех игр. Никаких настроек/get параметров ручка не принимает.

GET /api/get.php

id (число) - идентификатор игры

Получает информацию об одной игре. Надо передать id - идентификатор игры. Вернет HTTP 404 Not Found, если не передать id или если игра с таким id не найдена.

POST /api/add.php

title (строка) - название игры
platform (строка) - JSON-строка с массивом платформ, на которых запускается игра
price (число) - стоимость игры

Позволяет добавить игру. Принимает title, platform, price - информацию об игре. При добавлении игры в БД сам генерирует уникальный id и вносит начальную информацию о рейтинге.

Если какие-то данные не переданы, вернет 404.

POST /api/edit.php

id (число) - идентификатор игры
title (строка) - название игры
platform (строка) - JSON-строка с массивом платформ, на которых запускается игра
price (число) - стоимость игры

Позволяет отредактивать игру. Принимает id - идентификатор игры и title, platform, price - информацию об игре. Обратите внимание на то, что будут отредактированы только переданные поля - например, если title не передан, то название останется прежним. Тоже самое касается и прочих полей. Рейтинг и количество голосов отредактировать нельзя.

Вернет 404, если не передан id, или игра с таким id не найдена, а также, если не переданы вообще никакие данные для редактирования.

POST /api/delete.php

id (число) - идентификатор игры

Удаляет игру. Надо передать id - идентификатор игры. Вернет HTTP 404 Not Found, если не передать id или если игра с таким id не найдена.

POST /api/vote.php

id (число) - идентификатор игры
rating (число) - рейтинг, который выставлен игре

Позволяет "проголосовать" за игру, выставляя ей рейтинг. Бекэнд в ответ на "голос" пересчитает средний рейтинг и прибавит общее количество голосов.

Надо передать id - идентификатор игры и rating в пределах от 0 до 10. Вернет HTTP 404 Not Found, если не передать id или если игра с таким id не найдена, а также если не передан rating или rating за пределами 0 .. 10.

Некоторые ремарки.

Авторизация не нужна, допустим, что мы ее потом прикрутим каким-то дополнительным модулем.

Помните, что в интерфейсе одновременно может работать много пользователей. Например, редактируемую в данный момент игру уже кто-то мог удалить. Или создать ту же самую. Будет просто супер, если вы продумаете коллизии в этом месте.

Несмотря на то, что ручка list всегда отдает весь список игр и не умеет искать/фильтровать, чувствуйте себя свободно насчет того, чтобы на странице showcase реализовывать какие-то подобные фичи, если они вам покажутся уместными.

Любые усовершенствования от классического CRUD набора страниц приветствуются, не забудьте только записать, как вы рассуждали делая то или иное улучшение.

Если вы хотите что-то поменять в бекэнде, базе данных и прочее - не вопрос.

Нашли баг в бекэнде? Пишите в общий чат

Порядок действий