Микросервис availability

В статье описываются функции, логика работы, конфигурация и методы микросервиса availability.

Микросервис availability используется для предоставления информации о наличии товара.

Доступ к сервису выдается по запросу.

В работе микросервиса участвует сущность Остаток (Availability), которая содержит информацию об остатке (id, количество товаров в штуках, id/код/название склада (локации) и др.).

Для работы с микросервисом аутентификация не требуется.

/api/availability/

Параметры конфигурации указываются в Vault.

Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания.

По умолчанию

{
  "env": {

   "GRPC_SERVER_PORT": "grpc_порт_сервера",
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",

    "LOGGING_FORMAT": "формат_логирования",
    "LOGGING_LEVEL": "уровень_логирования",
    "POSTGRES_DATABASE": "availability",
    "POSTGRES_MIGRATION_USER": "availability_migration",
    "POSTGRES_PORT": "5432",
    "POSTGRES_USER": "availability_user",
    "SERVER_PORT": "порт_сервера"
  }
}

Copy-icon
Указываемые на каждом отдельном стенде

// пример взят с тестового стенда

{
  "env": {

    "OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
    "OAUTH_ECOM_ISSUER_URI": "url_ECOM_OAuth",
    "OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
    "OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel",
    "POSTGRES_HOST": "адрес_хоста",
    "POSTGRES_MIGRATION_PASSWORD": "пароль",
    "POSTGRES_PASSWORD": "пароль"
  }
}


Copy-icon

Получение информации об остатках товаров - GET запрос, /v1/availabilities

Request parameters

page - query-параметр: номер страницы
size - query-параметр: размер страницы
sort - query-параметр: сортировка страницы (например, по возрастанию артикула товара)
searchTerm - query-параметр: поисковый запрос
articleId - query-параметр: артикул товара (указанный в фильтре)
locationName - query-параметр: имя локации (указанное в фильтре)
locationCodeList - query-параметр: код локации (указанный в фильтре)
quantityFirstValue - query-параметр: первый числовой параметр фильтра "Количество"
quantityFirstOperator - query-параметр: первый числовой оператор фильтра "Количество" (например, "меньше")
quantityFilterConnectiveType - query-параметр: тип соединения числовых параметров фильтра "Количество" (например, "AND" или "OR")
quantitySecondValue - query-параметр: второй числовой параметр фильтра "Количество"
quantitySecondOperator - query-параметр: второй числовой оператор фильтра "Количество" (например, "больше")

Copy-icon
Response sample

{
    "content": [
        {
            "id": "7c856adf-a668-439c-8f82-3ad46e6aaacc",
            "articleId": "1009012DC",
            "quantity": 100.00,
            "replenishmentTime": 0,
            "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
            "locationCode": "677F",
            "locationName": "Главный склад F17"
        },
        {
            "id": "2b4d5f67-2425-454b-bb82-2d727909b9f8",
            "articleId": "1009010DC",
            "quantity": 100.00,
            "replenishmentTime": 0,
            "locationId": "a0f84bda-5e3d-4568-825b-680946defe58",
            "locationCode": "20AB",
            "locationName": "Главный склад D333"
        },
        {
            "id": "35b4a654-6386-4e59-8d46-5b822edf59ef",
            "articleId": "1009007DC",
            "quantity": 1000.00,
            "replenishmentTime": 0,
            "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
            "locationCode": "677F",
            "locationName": "Главный склад F17"
        }
    ],
    "pageable": {
        "sort": {
            "unsorted": false,
            "sorted": true,
            "empty": false
        },
        "pageNumber": 0,
        "pageSize": 3,
        "offset": 0,
        "paged": true,
        "unpaged": false
    },
    "last": false,
    "totalPages": 41,
    "totalElements": 123,
    "first": true,
    "numberOfElements": 3,
    "sort": {
        "unsorted": false,
        "sorted": true,
        "empty": false
    },
    "size": 3,
    "number": 0,
    "empty": false
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, возвращен список остатков
  • 422 - ошибка, Unprocessable Entity

Получение информации о конкретном остатке по его ID - GET запрос, /v1/availabilities/{id}

Request parameters

id - path-параметр, обязательный: уникальный идентификатор остатка

Copy-icon
Response sample

{
    "id": "8a1f3d66-fc7f-49bf-ad2b-bee4a1c982d8",
    "articleId": "1002354DC",
    "quantity": 120.00,
    "replenishmentTime": 0,
    "locationId": "a0f84bda-5e3d-4568-825b-680946defe58",
    "locationCode": "20AB",
    "locationName": "Главный склад D333"
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные о запрашиваемом остатке
  • 404 - ошибка, информация об остатке не найдена
  • 422 - ошибка, отсутствуют обязательные данные (например, id остатка)

Получение списка с кодами локациями (используется для фильтра “Код локации”) - GET запрос, /v1/availabilities/location-codes/unique

Request parameters

page - query-параметр: номер страницы
size - query-параметр: количество локаций в списке
term - query-параметр: поисковый запрос

Copy-icon
Response sample

{
    "content": [
        "23",
        "22",
        "21",
        "20AB",
        "20",
        "17",
        "15",
        "12",
        "1111",
        "111"
    ],
    "number": 1,
    "size": 10,
    "totalElements": 24,
    "pageable": {
        "sort": {
            "sorted": false,
            "unsorted": true,
            "empty": true
        },
        "pageNumber": 1,
        "pageSize": 10,
        "offset": 10,
        "paged": true,
        "unpaged": false
    },
    "last": false,
    "totalPages": 3,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "first": false,
    "numberOfElements": 10,
    "empty": false
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, возвращен список кодов локаций для фильтра “Код локации”
  • 422 - ошибка, Unprocessable Entity

Получение списка с артикулами (используется для фильтра “Артикул”) - GET запрос, /v1/availabilities/articles/unique

Request parameters

page - query-параметр: номер страницы
size - query-параметр: количество артикулов в списке
term - query-параметр: поисковый запрос

Copy-icon
Response sample

{
    "content": [
        "1000778DC"
    ],
    "number": 0,
    "size": 1,
    "totalElements": 1,
    "pageable": "INSTANCE",
    "last": true,
    "totalPages": 1,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "first": true,
    "numberOfElements": 1,
    "empty": false
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, возвращен список артикулов для фильтра “Артикул”
  • 422 - ошибка, Unprocessable Entity

Получение списка остатков - POST запрос, /v1/availabilities/total

Request body sample

[//массив articleId товаров]

Copy-icon
Response sample

{
    "content": [
        {
            "id": "7c856adf-a668-439c-8f82-3ad46e6aaacc",
            "articleId": "1009012DC",
            "quantity": 100.00,
            "replenishmentTime": 0,
            "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
            "locationCode": "677F",
            "locationName": "Главный склад F17"
        },
        {
            "id": "2b4d5f67-2425-454b-bb82-2d727909b9f8",
            "articleId": "1009010DC",
            "quantity": 100.00,
            "replenishmentTime": 0,
            "locationId": "a0f84bda-5e3d-4568-825b-680946defe58",
            "locationCode": "20AB",
            "locationName": "Главный склад D333"
        }
                 ]
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, возвращен список остатков
  • 422 - ошибка, Unprocessable Entity

Получение отфильтрованного списка остатков - POST запрос, /v1/availabilities/list

Request body sample

{
  "searchTerm": "склад",
  "articleId": "1001586DC",
  "locationCode": "20AB",
  "locationName": "Главный склад D333"
}

Copy-icon
Response sample

[
    {
        "id": "b96440db-fc18-4105-acaf-6a09c1e0d6e8",
        "articleId": "1001586DC",
        "quantity": 6.00,
        "replenishmentTime": 0,
        "locationId": "a0f84bda-5e3d-4568-825b-680946defe58",
        "locationCode": "20AB",
        "locationName": "Главный склад D333"
    }
]

Copy-icon
Response codes
  • 200 - операция выполнена успешно, возвращен список остатков с учетом примененных фильтров
  • 422 - ошибка, Unprocessable Entity

Создание нового остатка - POSt запрос, /v2/availabilities

Request body sample

{
  "articleId": "1001626DC",
  "quantity": 2,
  "replenishmentTime": 5,
  "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
  "locationCode": "677F",
  "locationName": "Главный склад F17"
}

Copy-icon
Response sample

{
    "id": "bfb9565e-2df2-4621-850f-02c4490c3af8",
    "articleId": "1001626DC",
    "quantity": 2,
    "replenishmentTime": 5,
    "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
    "locationCode": "677F",
    "locationName": "Главный склад F17"
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, новый остаток создан
  • 400 - ошибка, не удалось создать остаток
  • 409 - ошибка, остаток уже существует
  • 422 - ошибка, невалидные параметры

Редактирование остатка - PATCH запрос, /v2/availabilities/{availabilityId}

Request parameters

availabilityId - path-параметр, обязательный: уникальный идентификатор остатка, который нужно отредактировать

Copy-icon
Request body sample

{
    "articleId": "1001626DC",
    "quantity": 5,
    "replenishmentTime": 10,
    "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
    "locationCode": "677F",
    "locationName": "Главный склад F17"
}

Copy-icon
Response sample

{
    "id": "bfb9565e-2df2-4621-850f-02c4490c3af8",
    "articleId": "1001626DC",
    "quantity": 5,
    "replenishmentTime": 10,
    "locationId": "6d162d69-76db-470d-be15-2d226e6afb19",
    "locationCode": "677F",
    "locationName": "Главный склад F17"
}

Copy-icon

Response codes:

  • 204 - операция успешна, остаток обновлен и выдана обновленная информация по остатку
  • 404 - ошибка, остаток не найден
  • 409 - ошибка, остаток не может быть отредактирован
  • 422 - ошибка, невалидные данные в запросе

Обновление данных о локации остатка - PATCH запрос, /v1/availabilities/location-info

Request body sample

{
    "id": "bfb9565e-2df2-4621-850f-02c4490c3af8",
    "articleId": "1001626DC",
    "quantity": 5,
    "replenishmentTime": 10,
    "locationId": "20f340a2-17ee-47b2-81c2-793a5b265a3e",
    "locationCode": "22",
    "locationName": "Материалы из дерева"
}

Copy-icon
Response sample

Отсутствует. В ответе приходит только код операции, например, 202.

Response codes
  • 202 - операция выполнена успешно
  • 422 - ошибка, Unprocessable Entity

Удаление остатка по его ID - DELETE запрос, /v1/availabilities/{availabilityId}

Request parameters

availabilityId - path-параметр, обязательный: уникальный идентификатор остатка, который нужно удалить

Copy-icon
Response sample

Отсутствует. В ответе приходит только код операции, например, 204.

Response codes
  • 204 - операция выполнена успешно, остаток удален
  • 404 - ошибка, не удалось найти нужный остаток
  • 422 - ошибка, Unprocessable Entity

Связанные статьи

 Микросервисы