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

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

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

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

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

При обращении к микросервису availability-orchestration через API в запросах на создание, редактирование или удаление остатков необходимо в заголовке Authorization указать токен: Authorization: Bearer <токен>.

/api/availability-orchestration/

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

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "SERVER_PORT": "порт_сервера"
  }
}

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

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

{
  "env": {

    "AVAILABILITY_URL": "путь_к_сервису_availability",
    "CATALOG_URL": "путь_к_сервису_catalog",

    "KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka",
    "OAUTH_ECOM_BLACKLIST_TYPE": "информация_о_черном_списке_ECOM_OAuth",

    "OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
    "OAUTH_ECOM_ISSUER_URI": "url_ECOM_OAuth",
    "OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
    "OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel"
  }
}



Copy-icon

Методы микросервиса Copy-icon

  • Получение остатков товаров - GET запрос, /v1/availabilities
Request parameters

pageable object // обязательный параметр, разбивает результат на страницы, указывает, по какому свойству и порядок сортировки
{
  "page": 0, // номер страницы
  "size": 3, // количество показываемых элементов
  "sort": [  // параметр сортировки, по какому свойству идет сортировка и ее порядок
    "id,asc"
  ]
}
articleId array // необязательный параметр, массив id товаров, для отображения информации только по заданным остаткам (если указан, то параметр разбивки на страницы игнорируется)

Copy-icon
Response sample

{
  "content": [ // содержит массив остатков, в соответствии с запросом показано 3 объекта, отсортированных по id по возрастанию
     {
      "id": "02b986c8-b44f-411c-9b2c-df8a9a29a925", // id остатка
      "articleId": "1000602DC", // id товара
      "quantity": 1, // количество товара
      "replenishmentTime": 0, // время поставки товара, это свойство не используется на данный момент
      "locationCode": "21" // обязательный параметр, код локации
    },
    {
      "id": "02c6deb3-5832-4774-a5dc-bf075e8f43f5",
      "articleId": "1000195DC",
      "quantity": 12,
      "replenishmentTime": 0,
      "locationCode": "21"
    },
    {
      "id": "041eac68-ce55-4d82-97b3-fdc812aa552b",
      "articleId": "1000075",
      "quantity": 0,
      "replenishmentTime": 12,
      "locationCode": "21"
    }
  ],
  "pageable": {
    "sort": {
      "unsorted": false,
      "sorted": true,
      "empty": false
    },
    "pageNumber": 0,
    "pageSize": 3,
    "offset": 0,
    "paged": true,
    "unpaged": false
  },
  "last": false,
  "totalPages": 51,
  "totalElements": 151,
  "first": true,
  "numberOfElements": 3,
  "sort": {
    "unsorted": false,
    "sorted": true,
    "empty": false
  },
  "size": 3,
  "number": 0,
  "empty": false
}

Copy-icon
Response codes

200 - операция успешно выполнена. Отдает или массив объектов (если есть информация), или пустой массив (если информации по задаваемым параметрам нет).

  • Создание остатка товара с кэшированием - POST запрос, /v3/availabilities
Request body sample

{
  "articleId": "1000419DC",
  "quantity": 10,
  "replenishmentTime": 14,
  "locationId": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "locationCode": "A007",
  "locationName": "Центральный склад"
}
Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "articleId": "1000419DC",
  "quantity": 10,
  "replenishmentTime": 14,
  "locationId": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "locationCode": "A007",
  "locationName": "Центральный склад"
}
Copy-icon
Response codes
  • 201 - Операция успешна. Создан остаток.
  • 400 - Остаток не создан.
  • 409 - Ошибка. Остаток уже существует.
  • 422 - Ошибка. Данные, передаваемые в запросе, невалидны.
  • Получение остатка по его ID - GET запрос, /v1/availabilities/{id}
Request parameters

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

Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526", // id остатка
  "articleId": "123", // id товара
  "quantity": 10, // количество товара
  "replenishmentTime": 0, // время поставки товара, сейчас не используется
  "locationCode": "21" // обязательный параметр, код локации
}

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 - Операция выполнена успешно, возвращен список кодов локаций для фильтра “Код локации”.

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

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 - Операция выполнена успешно, возвращен список артикулов для фильтра “Артикул”.

  • Удаление  остатка по его ID с кэшированием - DELETE запрос, /v2/availabilities/{id}
Request parameters

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

Copy-icon
Response sample

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

Copy-icon
Response codes
  • 204 - операция выполнена успешно, остаток удален
  • 404 - ошибка, остаток с таким ID не найден
  • Создание остатка - 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
  • 201 - операция выполнена успешно, новый остаток создан
  • 400 - ошибка, не удалось создать остаток
  • 409 - ошибка, остаток уже существует
  • 422 - ошибка, невалидные параметры
  • Редактирование остатка с кэшированием - PATCH запрос, /v3/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 - операция успешна, остаток обновлен и выдана обновленная информация по остатку
  • 400 - ошибка, остаток не создан
  • 409 - ошибка, такой остаток уже существует
  • 422 - ошибка, невалидные данные в запросе
  • Удаление остатка по его ID - DELETE запрос, /v1/availabilities/{availabilityId}
Request parameters

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

Copy-icon
Response sample

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

Response codes
  • 204 - Операция успешна. Остаток удален.
  • 404 - Ошибка. Остаток с таким ID не найден.
  • Редактирование наличия товара по ID остатка - PATCH запрос, /v2/availabilities/{availabilityId}
Request parameters

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

Copy-icon
Request body sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "articleId": "1000419DC",
  "quantity": 10,
  "replenishmentTime": 14,
  "locationId": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "locationCode": "A007",
  "locationName": "Центральный склад"
}

Copy-icon
Response sample
{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "articleId": "1000419DC",
  "quantity": 10,
  "replenishmentTime": 14,
  "locationId": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "locationCode": "A007",
  "locationName": "Центральный склад"
}
Copy-icon
Response codes
  • 204 - Операция успешна. Остаток обновлен, и выдана обновленная информация по остатку.
  • 400 - Ошибка. Остаток не создан.
  • 409 - Ошибка. Такой остаток уже существует.
  • 422 - Ошибка. Невалидные данные в запросе.