Ryu звернувся до студента із завданням, щоб можна було додавати бійців та змінювати їх характеристики. Також Ryu хоче, щоб було видно, хто саме користується додатком.
У Ryu вже є сторінки реєстрації та логіну, а також сторінка перегляду характеристик бійців, проте немає backend частини.
- При першому запуску необхідно виконати команду
. build-start
(виконуваний файл build-start.sh
знаходиться у корені проекту)
- Після цього можно запускати за допомогою команди
npm start
- В папці client знаходиться невеличкий додаток на react, в якому є сторінки реєстрації, логіна, додавання та вибір бійців. Цей проект розміщений для ознайомлення і його основна мета - показати, як клієнт працює з сервером. Запити від клієнта можна подивитися у вкладці Network в Chrome Dev tool. При розробці backend частини використовуйте 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
- При створенні бійця - усі поля обв'язкові, окрім
health
таid
- При створення юзера чи бійця - повинно бути пристунє хоча б одне поле з моделі
- При створенні юзера - усі поля обв'язкові, окрім
- 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)
Намагайтеся давати лаконічні, але зрозумілі повідомлення про помилки, наприклад:
- User not found
- User entity to create isn't valid
При реалізації домашнього завдання дуже важливо дотримуватися заданої структури проекту та росподілу на шари:
- repositories - робота з базою даних
- services - бізнес логіка додатка
- routes - прийом запитів і відправка відповідей
- Додати функціонал самої битви з попереднього завдання.
- Реалізувати збереження битв і переглядати їх історії.