Разворачивание проекта

Для того чтобы развернуть проект после клонирование репозитория, нужно в корневой директории проекта нужно запустить следующую команду npm install && npm run deploy. Данная команда установит все зависимости в проекте, как сервера так и клиентской части, сделает сборку клентской части, а так же добавить файл данных Nedb для демонстрации функциональности проекта.

Для запуска проекта запускаем в корневой директории проекта npm run start. Команда запустить два сервера, один сервер API, который слушает 3000 порт и второй статистический сервер который слушает 5000 порт, он и раздаёт файлы приложения.

Описание API

Сущности

Имеется всего одна сущность заявки requisition, имеющая слудующую схему:

{
    "_id": 1,
    "clientName": "",
    "carrier": {
        "firstName": "",
        "patronymic": "",
        "lastName": "",
        "phone": "",
        "ati": 1
    },
    "comments": "",
    "createdAt": ""
}
  • _id – номер заявки, тип положительное целое число, автоматически создаётся на сервере автоинкрементом
  • clientName – название фирмы клиента, строковое значение:
  • carrier– данные о перевозчике, со следующими полями
    • firstName – имя перевозчика, строковое значение
    • patronomyc – отчество перевозчика, строковое значение
    • lastName – отчество перевозчика, строковое значение
    • phone – контактный телефон перевозчика, строковое значение, номер телефона начинаетс с плюсы
    • ati – код ATI перевозчика, строковое значение, тип положительное целое число
  • comments – комментарий к заявке, строковое значение
  • createdAt– дата создания заявки в формате ISO, строковое значение, автоматически создаётся на сервере

Запросы

Обращение к ресурсам сущности происходит следующим образом.

Получить список заявок

Путь: GET /requisition?page=1&perPage=10

Параметры запроса:

Реализованна пагинация.

  • page – страница, необязательное, по умолчанию значение "1"
  • perPage– количество заявок на странице, необязательное, по умолчанию значение "10"

Пример ответа сервера:

{
    "message": "OK",
    "pagination": {
        "page": 1,
        "perPage": 10,
        "all": 50
    },
    "data": []
}
  • message – сообщение от сервера, данное поле существует и в других запросах
  • pagination– информация о пагинации
    • all – общее количество заявок
  • data – масив содержащий объекты заявок согласно схеме выше, данное поле существует и в других запросах, в нём находяться запрашиваемые данные

Получить заявку по номеру

Путь: GET /requisition/{id}

  • id – номер заявки

Пример ответа сервера:

{
    "message": "OK",
    "data": {
        "_id": 1,
        "clientName": "ООО \"Фрукты и Овощи\"",
        "carrier": {
            "firstName": "Иван",
            "patronymic": "Иванович",
            "lastName": "Иванов",
            "phone": "+79052671294",
            "ati": 12345
        },
        "comments": "Задача организации в формировании соответствующий условий.",
        "createdAt": "2020-09-01T06:09:49.133Z"
    }
}

Создание заявки

Путь: POST /requisition

Пример тела запроса к серверу:

{
    "clientName": "ООО \"Фрукты и Овощи\"",
    "carrier": {
        "firstName": "Иван",
        "patronymic": "Иванович",
        "lastName": "Иванов",
        "phone": "+79123481294",
        "ati": 12345
    },
    "comments": "Задача организации."
}
  • clientName – обязательное поле
  • carrier– обязательное поле
    • firstName – обязательное поле
    • patronomyc – обязательное поле
    • lastName – обязательное поле
    • phone – обязательное поле
    • ati – обязательное поле
  • comments – необязательное поле

Пример ответа сервера:

Возращает созданную заявку с датой создания и с её номером

{
    "message": "Created",
    "data": {
        "_id": 51,
        "clientName": "ООО \"Фрукты и Овощи\"",
        "carrier": {
            "firstName": "Иван",
            "patronymic": "Иванович",
            "lastName": "Иванов",
            "phone": "+79123481294",
            "ati": 12345
        },
        "comments": "Задача организации в формировании соответствующий условий.",
        "createdAt": "2020-09-01T05:58:05.698Z"
    }
}

Обновление заявки

Путь: PUT /requisition/{id}

  • id – номер заявки

Пример тела запроса к серверу:

Все поля являются необязательными

{
    "clientName": "ООО \"Фрукты и Овощи\"",
    "carrier": {
        "firstName": "Иван",
        "patronymic": "Иванович",
        "lastName": "Иванов",
        "phone": "+79123481294",
        "ati": 12345
    },
    "comments": "Задача организации."
}

Пример ответа сервера:

Возращает изменёную заявку:

{
    "message": "Updated",
    "data": {
        "_id": 1,
        "clientName": "ООО \"Фрукты и Овощи\"",
        "carrier": {
            "firstName": "Иван",
            "patronymic": "Иванович",
            "lastName": "Иванов",
            "phone": "+79052671294",
            "ati": 12345
        },
        "comments": "Задача организации",
        "createdAt": "2020-09-01T06:09:49.133Z"
    }
}

Удалени заявки

Путь: DELETE /requisition/{id}`

  • id – номер заявки

Пример ответа сервера:

{
    "message": "Removed",
    "_id": 1
}

Другие ответы сервера

Страница не найдена (404):

// тело ответа
{
    "message": "Not Found"
}

Неправильный запрос (400):

// тело ответа
{
    "message": "carrier.ati must be a number"
}