- При первом запуске необходимо выполнить
. build-start.sh
(исполняемый файл build-start.sh
находится в корне проекта)
- Далее можно запускать с помощью команды
npm start
- В папке client находится небольшое приложение на реакте, на котором есть вьюхи регистрации, логина, добавление и выбор бойцов. Этот проект размещен для ознакомления и основная цель - показать как клиент работает с сервером. Запросы от клиента можно посмотреть во вкладке Network в Chrome Dev tool. При разработке бэкэнд части использовался Postman для тестирования API.
- В папке 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. Валидируется следующее:
- Наличие полей:
- При создании юзера - все поля обязательны, кроме
id
- При создании бойца - все поля обязательны, кроме
id
иhealth
- При обновлении юзера или бойца - должно присутствовать хотя бы одно поле из модели
- При создании юзера - все поля обязательны, кроме
- Id в body запросов должен отсутствовать
- Наличие лишних полей(не из папки
models
) - запрещено - Формат полей:
- email - только gmail почты
- phoneNumber: +380xxxxxxxxx
- power - число, 1 < power < 100
- defense - число, 1 < defense < 10
- health - число, 80 < health < 120, необязательное поле(по умолчанию - 100)
- password - строка, min 3 символа
Сторонние npm библиотеки для валидаций не использовались
Также реализован response.middleware
для выдачи ответа сервера по следующим правилам:
- Если все прошло хорошо - статус 200 и JSON
- Ошибки
- Ошибки запроса (валидация, проблемы в обработке) - статус 400 и JSON с ошибкой
- Если что-то не найдено - статус 404 и JSON с ошибкой
JSON ошибки формата
{
error: true,
message: ''
}
База данных не хранит:
- Юзеров с одинаковыми "email"
- Юзеров с одиниковыми "phoneNumber"
- Бойцов с одинаковыми "name"
(все поля case insensitive)
Основано на клик