Backend API - kzagorulko/flower-system GitHub Wiki

Как осуществить доступ

Взаимодействие клиента и сервера происходит в соответствии с протоколом REST.

В заголовке метода сначала стоит тип запроса (POST, GET, PATCH, DELETE, ...), затем указан путь, по которому нужно совершить запрос.

Например, если указан заголовок GET /users/, то необходимо выполнить GET запрос по адресу /users/

Если первой строкой после заголовка указано TOKEN REQUIRED, то при запросе необходимо отправлять заголовок Authorization: Bearer <access-token>

Если указано REFRESH TOKEN REQUIRED, то в Authorization необходимо класть refresh-token соответственно: Authorization: Bearer <refresh-token>

Шаблон ответа

После заголовка ответа первой строкой указывается для успешного ответа его тип и код Например, Если в ответе указано JSON \ 200, значит в ответе будет указан заголовок Content-type: application/json, код ответа будет 200, а тело ответа будет оформлено в соответствии с JSON

Общий шаблон ответа с ошибкой

Если на сервере произошла ошибка, то будем возвращен ответ в соответствии со следующим шаблоном:

JSON \ <status_code>

{
    "description": "<детальный текст ошибки>"
}

Переменная status_code равна коду ошибки в соответствии с кодами ответов HTTP

Методы

Users

Авторизация JWT

Работа с пользователями

  • GET /users/ - получить список пользователей
  • GET /users/{user_id} - получить подробную информацию о пользователях

Providers

Работа с поставщиками

  • GET /providers/ - получить список поставщиков
  • GET /providers/{provider_id} - получить подробную информацию о поставщике
  • GET /providers/actions - получить полномочия пользователя для работы с поставщиками
  • POST /providers/ - создать нового поставщика
  • PATCH /providers/{provider_id:int} - обновить данные о поставщике

Branches

Работа с филиалами

Products

Работа с продуктами

Sales

Работа с продажами

  • POST /sales/ - добавить отчет о продаже
  • GET /sales/ - получить список отчетов
  • GET /sales/{sale_id} - получить подробную информацию о продаже (вместе с информации о продукте и филиале)

Warehouses

Работа со складами

Purchases

Работа с закупками

Supplies

Работа с поставками в филиалы

Requests

Работа с заявками

Работа с категориями заявок

Детальная информация о методах

POST /users/refresh-tokens

Метод для получения refresh-token (действует 30 дней) и access-token (действует 15 минут).

Параметры

JSON

Название Тип Требуется Описание
identifier string да email или username
password string да пароль юзера

Ответ

JSON \ 200

{
    "id": "<user.id>",
    "username": "<user.username>",
    "refresh_token": "<refresh-token>",
    "access_token": "<access-token>",
}

POST /users/access-tokens

REFRESH TOKEN REQUIRED

Метод для получения access-token (действует 15 минут).

Ответ

JSON \ 200

{
    "access_token": "<access-token>",
}

GET /users/

TOKEN REQUIRED

Метод для получения пользователей [TODO: с возможностью фильтрации] и пагинации

Параметры

form-data

Название Тип Требуется Описание
page string нет номер страницы
pageSize string нет размер страницы

Ответ

JSON \ 200

{
    "items": [
        {
            "id": "<id>",
            "username": "<username>",
        }
    ],
    "total": "<list size>",
}

GET /users/{user_id}

TOKEN REQUIRED

Метод для получения подробной информации о пользователе

Параметры

empty

Ответ

JSON \ 200

{
    "id": 1,
    "displayName": "Администратор",
    "username": "admin",
    "email": "[email protected]",
    "deactivated": false,
    "branches": [
        {
            "id": 1,
            "address": "г. Москва, ул. Улица, д. -1"
        }
    ],
    "role": "Администрация"
}

GET /providers/

TOKEN REQUIRED

Возвращает список всех поставщиков с заданными параметрами сортировки

Параметры

Название Тип Требуется Описание
field string нет поле для сортировки
order string нет ASC или DESC
page int нет номер страницы
perPage int нет размер страницы
search string нет имя для поиска

Ответ

JSON/200

{
   "items":[
      {
         "id":"<id>",
         "name":"<name>",
         "status":"<status>"
      },
   ],
   "total":"<int>"
}

GET /providers/{provider_id}

TOKEN REQUIRED

Возвращает полные данные о поставщике

Ответ

`JSON/200"

{
   "id":"<id>",
   "name":"<name>",
   "status":"<status>",
   "email":"<email>",
   "phone":"<phone>",
   "data":"<data>"
}

GET /providers/actions

TOKEN REQUIRED Возвращает список доступных действий с поставщиками для текущего пользователя

Ответ

JSON/200

{
   "actions":[
      "get",
      "create",
      "update",
      "update_status"
   ]
}

POST /providers/

TOKEN REQUIRED

Метод для создания поставщиков

Параметры

JSON

Наименование Тип Требуется Описание
name string да наименование поставщика
phone string да телефон поставщика
email string да почта поставщика
data string да подробный текст о поставщике
address string да адрес поставщика

Ответ

JSON/200

{ "id": "<id>" }

PATCH /providers/{provider_id}

TOKEN REQUIRED

Метод для обновления данных о поставщике и/или его статуса.

Параметры

JSON - те же, что и в методе POST /providers/ + status

Ответ

No content 204

GET /branches/

TOKEN REQUIRED

Возвращает список всех филиалов с заданными параметрами сортировки

Параметры

Название Тип Требуется Описание
field string нет поле для сортировки
order string нет ASC или DESC
address string нет поле для сортировки
page int нет номер страницы
perPage int нет размер страницы
search string нет имя для поиска

Ответ

JSON/200

{
   "items":[
      {
         "id":"<id>",
         "address":"<address>",
      },
   ],
   "total":"<int>"
}

GET /branches/{branch_id}

TOKEN REQUIRED

Возвращает полные данные о филиале

Ответ

JSON/200

{
   "id":"<id>",
   "address":"<address>",
   "users":[
       {
          "id":"<id>",
          "username": "<username>", 
       }
   ]
}

POST /branches/

TOKEN REQUIRED

Метод для создания филиалов

Параметры

JSON

Наименование Тип Требуется Описание
address string да адрес филиала

Ответ

JSON/200

{ "id": "<id>" }

PATCH /branches/{branch_id}

TOKEN REQUIRED

Метод для обновления данных о филиале.

Параметры

JSON - те же, что и в методе POST

Ответ

No content 204

POST /products/

TOKEN REQUIRED

Создать продукт

Параметры

JSON

Название Тип Требуется Описание
name string да название
price float да цена
description string да описание
image string (base64) да картинка

Ответ

JSON / 200

{
   "id": "new product id"
}

GET /products/

TOKEN REQUIRED

Получить список продуктов

Параметры

JSON

Название Тип Требуется Описание
search string нет -
page int нет -
perPage int нет -
order string нет порядок сортировки
field string нет поле сортировки

Ответ

JSON / 200

{
    "items": [{
        "id": "<id>",
        "name": "<name>",
        "price": "<price>",
        "image_path": "<full image path>",
        "description": "<description>"
    }],
    "total": "<amount of all items>"
}

PATCH /products/{product_id}

TOKEN REQUIRED

Изменить продукт

Параметры

JSON

Название Тип Требуется Описание
name string нет название
price float нет цена
description string нет описание
image string (base64) нет картинка

Ответ

JSON / 200

{
    "product": {
        "id": "<id>",
        "name": "<name>",
        "price": "<price>",
        "image_path": "<full image path>",
        "description": "<description>"
    }
}

GET /products/{product_id}

TOKEN REQUIRED

Получить информацию о продукте

Параметры

EMPTY

Ответ

JSON / 200

{
    "id": "<id>",
    "name": "<name>",
    "price": "<price>",
    "image_path": "<full image path>",
    "description": "<description>"
}

POST /sales/

TOKEN REQUIRED

Создать отчет о продаже. Создавать привязанный к филиалу отчет о продаже может только пользователь, состоящий с этом филиале.

Создается раз в месяц для каждого продукта каждым из филиалов.

Параметры

JSON

Название Тип Требуется Описание
value float да количество продаж
product_id int да id продукта
branch_id int да описание

Ответ

JSON / 200

{
   "id": "new sale id"
}

GET /sales/

TOKEN REQUIRED

Получить список продуктов

Параметры

JSON

Параметры year и month следует отправлять вместе. По-одному параметры не будут учитываться.

Название Тип Требуется Описание
product_id int нет id продукта
branch_id int нет id филиала
page int нет -
perPage int нет -
year string нет год в формате YYYY
month string нет месяц в формате mm

Ответ

JSON / 200

[
    {
        "date": "08.2020",
        "sales": [
            {
                "id": "<sale_id>",
                "value": "<value>",
                "product_id": "<product_id>",
                "branch_id": "<branch_id>",
            },
            {"... sale2 info"},
        ]
    },
    {
        "date": "07.2020",
        "sales": [
            {"... sale3 info"},
            {"... sale4 info"},
        ]
    },
]

GET /sales/{sale_id}

TOKEN REQUIRED

Получить подробную информацию о продаже.

Ответ включает информацию о продукте и филиале

Параметры

EMPTY

Ответ

JSON / 200

{
    "items": {
        "id": 3,
        "value": 9.0,
        "date": "2020.11.13 00:00:00",
        "product_id": 3,
        "branch_id": 2,
        "product": {
            "id": 3,
            "name": "Ромашка",
            "price": 5.0,
            "image_path": "http://127.0.0.1:8000/media/image",
            "description": "Одно из наиболее известных лекарственных растений"
        },
        "branch": {
            "id": 2,
            "address": "г. Москва, ул. Молодогвардейская, д. 61, стр.16"
        }
    }
}

POST /requests/

TOKEN REQUIRED

Создать заявку

Параметры

JSON

Название Тип Требуется Описание
name string да название
department_id int да id департамента
description string да описание
category_id int да id категории

Ответ

JSON / 200

{
   "id": "new request id"
}

GET /requests/

TOKEN REQUIRED

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

Параметры

JSON

Название Описание
name -
page -
perPage -
order порядок сортировки
field поле сортировки
view мод отображения [INBOX, OUTBOX, EXECUTOR]
noExecutor фильтр по заявкам без исполнителя

Ответ

JSON / 200

{
    "items": [{
        "id": "<id>",
        "name": "<name>",
        "status": "<Имя статуса (на русском)",
        "statusCode": "<Код статуса>",
        "created": "<created>",
        "hasExecutor": "<есть ли исполнитель>"
    }],
    "total": "<amount of all items>"
}

PATCH /requests/{request_id}

TOKEN REQUIRED

Назначить себя на заявку

Параметры

EMPTY

Ответ

No content / 204

GET /requests/{request_id}

TOKEN REQUIRED

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

Параметры

EMPTY

Ответ

JSON / 200

{
    "id": "<id>",
    "name": "<name>",
    "description": "<description>",
    "status": "<Имя статуса (на русском)",
    "statusCode": "<Код статуса>",
    "created": "<created>",
    "hasExecutor": "<есть ли исполнитель>",
    "category": "<Категория заявки>",
    "creator": "<Пользоватль-создатель заявки>",
    "executor": "<Пользователь-исполнитель>"
}

PATCH /requests/{request_id}/status

TOKEN REQUIRED

Изменить статус заявки

Параметры

Название Описание
status ['CANCELLED', 'DONE']

Ответ

No content / 204

POST /requests/categories/

TOKEN REQUIRED

Создать категорию заявки

Параметры

JSON

Название Тип Требуется Описание
name string да название

Ответ

JSON / 200

{
   "id": "new request category id"
}

GET /requests/categories/

TOKEN REQUIRED

Получить список категорий заявок

Параметры

JSON

Название Описание
name -
page -
perPage -
order порядок сортировки
field поле сортировки

Ответ

JSON / 200

{
    "items": [{
        "id": "<id>",
        "name": "<name>"
    }],
    "total": "<amount of all items>"
}

PATCH /requests/categories/{category_id}

TOKEN REQUIRED

Исправить имя категории

Параметры

Название Тип Требуется Описание
name string да название

Ответ

No content / 204

GET /requests/categories/{category_id}

TOKEN REQUIRED

Получить информацию о категории заявки

Параметры

EMPTY

Ответ

JSON / 200

{
    "id": "<id>",
    "name": "<name>",
}

POST /warehouses/

TOKEN REQUIRED

Создать склад

Параметры

JSON

Название Тип Описание
address string адрес (уникальный)
max_value float макс. вместимость

Вместимость, как и все value, измеряется в условных единицах

Ответ

JSON / 200

{
    "id": "<id>",
}

GET /warehouses/

TOKEN REQUIRED

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

Параметры

form-data

Название Описание
address адрес (уникальный)
max_value макс. вместимость
page -
perPage -
order порядок сортировки
field поле сортировки

Вместимость, как и все value, измеряется в условных единицах

Ответ

JSON / 200

{
    "items": [
        {
            "id": 1,
            "address": "г. Москва, ул. Пушкина, д. 30",
            "max_value": 567.0,
            "left_amount": 267.0
        }
    ],
    "total": 1
}

PATCH /warehouses/{warehouse_id}

TOKEN REQUIRED

Изменить данные склада

Параметры

JSON

Название Тип Описание
address string адрес (уникальный)
max_value float макс. вместимость

Ответ

No content / 204

GET /warehouses/{warehouse_id}

TOKEN REQUIRED

Получить инфо о складе вместе с продуктами

Параметры

EMPTY

Ответ

JSON / 200

{
    "id": 1,
    "address": "г. Москва, ул. Пушкина, д. 30",
    "max_value": 567.0,
    "left_amount": 267.0,
    "products": [
        {
            "id": 2,
            "value": 300.0
        }
    ]
}

POST /purchases/

TOKEN REQUIRED

Создать закупку

Параметры

JSON

Название Тип Описание
product_id int -
warehouse_id int -
value float величина закупки

Величина закупки, как и все value, измеряется в условных единицах

Ответ

JSON / 200

{
    "id": "<id>",
}

PATCH /purchases/{purchase_id}/status

TOKEN REQUIRED

Изменить статус закупки

При изменении статуса закупки на DONE, продукт автоматически привязывается к складу

Параметры

JSON

Название Тип Описание
status string IN_PROGRESS / CANCELLED / DONE

Статус NEW устанавливается при создании

Ответ

No content / 200

GET /purchases/

TOKEN REQUIRED

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

Параметры

form-data

Название Описание
product_id -
warehouse_id -
startDate нижняя граница
endDate верхняя граница
page -
perPage -
order порядок сортировки
field поле сортировки

Ответ

JSON / 200

{
    "items": [
        {
            "id": 1,
            "value": 100.0,
            "status": "Новая",
            "product_id": 1,
            "warehouse_id": 1
        }
    ],
    "total": 1
}

GET /purchases/{purchase_id}

TOKEN REQUIRED

Получить инфо о закупке

Параметры

EMPTY

Ответ

JSON / 200

{
    "id": 1,
    "value": 100.0,
    "status": "Новая",
    "product_id": 1,
    "warehouse_id": 1
}

POST /supplies/

TOKEN REQUIRED

Создать поставку

Параметры

JSON

Название Тип Описание
product_id int -
warehouse_id int -
branch_id int -
value float величина поставки

Величина поставки, как и все value, измеряется в условных единицах

Ответ

JSON / 200

{
    "id": "<id>",
}

GET /supplies/

TOKEN REQUIRED

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

Параметры

form-data

Название Описание
product_id -
warehouse_id -
branch_id -
startDate нижняя граница
endDate верхняя граница
page -
perPage -
order порядок сортировки
field поле сортировки

Ответ

JSON / 200

{
    "items": [
        {
            "id": 1,
            "value": 100.0,
            "product_id": 1,
            "warehouse_id": 1,
            "branch_id": 1
        }
    ],
    "total": 1
}

GET /supplies/{supply_id}

TOKEN REQUIRED

Получить инфо о поставке

Параметры

EMPTY

Ответ

JSON / 200

{
    "id": 1,
    "value": 100.0,
    "product_id": 1,
    "warehouse_id": 1,
    "branch_id": 1
}
⚠️ **GitHub.com Fallback** ⚠️