Skip to content

Latest commit

 

History

History
109 lines (87 loc) · 6.64 KB

README_UA.md

File metadata and controls

109 lines (87 loc) · 6.64 KB

NodeJS Hometask

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 - прийом запитів і відправка відповідей

Додаткове завдання

  • Додати функціонал самої битви з попереднього завдання.
  • Реалізувати збереження битв і переглядати їх історії.