Code Monkey home page Code Monkey logo

nodejs-hometask's Introduction

NodeJS Hometask

Ryu обратился к студенту с заданием добавить возможность добавлять бойцов и менять их характеристики. Также Ryu хочет, чтобы было видно, кто конкретно пользуется приложением.

У Ryu уже есть страницы логина и регистрации, а также создание и просмотр характеристик бойцов, однако нет бэкэнд части.

Запуск проекта

  • При первом запуске необходимо выполнить
. 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)

Постарайтесь давать лаконичные, но понятные сообщения об ошибках, например:

  • User not found
  • User entity to create isn't valid

При реализации домашнего задания очень важно соблюдать структуру проекта и слои:

  • repositories - работа с базой
  • services - бизнес логика приложения
  • routes - прием запросов и отправка ответов

Дополнительное задание

  • Добавить функционал битвы из предыдущего задания
  • Реализовать сохранение битвы и просмотр их историй

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.