Ryu обратился к студенту с заданием добавить возможность добавлять бойцов и менять их характеристики. Также Ryu хочет, чтобы было видно, кто конкретно пользуется приложением.
У Ryu уже есть страницы логина и регистрации, а также создание и просмотр характеристик бойцов, однако нет бэкэнд части.
- Для первого запуска необходимо выполнить
. build-start
- далее можно запускать с помощью команды
npm start
- В папке client находится небольшое приложение на реакте, на котором есть вьюхи регистрации, логина, добавление и выбор бойцов. Этот проект размещен для ознакомления и основная цель - показать как клиент работает с сервером. Звпросы от клиента можно посмотреть во вкладке Network в Chrome Dev tool.
- В папке config находится конфигурация базы данных. В качестве базы данных выступает файл database.json.
- В папке middlewares находятся промежуточные функции, которые отрабатывают перед контроллерами в папке routes.
- В папке repositories находятся классы для работы с базой данных для каждой сущности. При желании про паттерн репозитория можно почитать здесь
- В папке routes находятся контроллеры для каждой сущности. Это точка входа для запроса в backend часть приложения.
- В папке services находятся классы для обработки запросов по бизнес правилам для каждой сущности. Очень важно, чтобы контроллеры оставались чистыми, а все бизнес равила располагались в сервисах. Это позволяет эффективнее и читабельнее писать и переиспользовать код.
- В папке models находятся модели основных сущностей приложения. Это то, в каком виде сущности хранятся в базе данных.
- index.js - это точка входа в приложение и конфигурация самого сервера.
Необходимо реализовать REST для сущностей пользователя и бойца.
USER:
GET /api/users
GET /api/users/:id
POST /api/users
PUT /api/users/:id
DELETE /api/users/:id
FIGHTER
GET /api/fighters
GET /api/fighters/:id
POST /api/fighters
PUT /api/fighters/:id
DELETE /api/fighters/:id
Для запросов на создание и обновление сущностей необходимо реализовать валидацию через middlewares. Правила валидации определяются сущностями, в папке models. Валидировать необходимо:
- Наличие полей
- Формат полей:
- email - только gmail почты
- phoneNumber: +380xxxxxxxxx
- power - число и < 100
- Id в body запросов должен отсутствовать
- Лишние поля не должны пройти в БД
Все дополнительные валидации приветствуются.
Также необходимо реализовать middleware для выдачи ответа сервера по следующим правилам:
- Если все прошло хорошо - вернуть статус 200 и JSON
- Ошибки
- Ошибки запроса (валидация, проблемы в обработке) - вернуть статус 400 и JSON с ошибкой
- Если что-то не найдено - вернуть статус 404 и JSON с ошибкой
JSON ошибки формата
{
error: true,
message: ''
}
Постарайтесь давать лаконичные, но понятные сообщения об ошибках, например:
- User not found
- User entity to create isn't valid
При реализации домашнего задания очень важно соблюдать структуру проекта и слои:
- repositories - работа с базой
- services - бизнес логика приложения
- routes - прием запросов и отправка ответов
- Добавить функционал битвы из предыдущего задания
- Реализовать сохранение битвы и просмотр их историй