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

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

Микросервис cart-orchestration предоставляет функционал по работе с корзиной: создание корзины, добавление/удаление товара в/из корзины, обновление корзины, листинг всех корзин.

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

В работе микросервиса участвуют следующие сущности:

  • Корзина (Cart) - содержит данные конкретной корзине (id корзины, id пользователя, id валюты, список товаров в корзине)
  • Товар в корзине (CartItem) - содержит данные о товарах в конкретной корзине (id товара, количество товара в штуках, название товара, цена за одну штуку, цена со скидкой за 1 штуку, итоговая цена товара с учетом его количества, итоговая цена товара с учетом скидки, итоговая скидка и др.)

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

/api/cart-orchestration/

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

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm"
  }
}

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

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


{
  "env": {

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



Copy-icon

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

Работа с корзиной Copy-icon

  • Получение списка корзин (с пагинацией) - GET запрос, /
Request parameters (request body sample)

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

Copy-icon
Response sample

{
    "id": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
    "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
    "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
    "items": [
        {
            "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
            "articleId": "article1",
            "quantity": 4,
            "name": "Pencil",
            "unitPrice": 1050.25,
            "discountUnitPrice": 950.25,
            "totalPrice": 4201,
            "discountPrice": 999.9,
            "discountSum": 10.1
          }
        ]
     }

Copy-icon
Response codes

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

  • Получение конкретной корзины (обновленная по данным корзина) - GET запрос, /api/cart-orchestration/v1/carts/{id}/repriced
Request parameters (request body sample)

id // обязательный path-параметр, идентификатор корзины
currencyId // необязательный параметр, идентификатор валюты. Если указан, то возвращает цены по товарам только в указанной валюте.


Copy-icon
Response sample

{
  "id": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
  "items": [
    {
      "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
      "articleId": "article1",
      "quantity": 4,
      "name": "Pencil",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1,
      "catalogInfo": {
        "asset": {
          "id": "string",
          "media": {
            "url": "string",
            "absoluteUrl": "string",
            "name": "string",
            "type": "string",
            "size": 0,
            "resolution": "string",
            "createdDate": "2023-11-22T11:05:51.162Z"
          },
          "title": "string",
          "altAttr": "string",
          "description": "string",
          "sign": "string",
          "tags": [
            "string"
          ]
        },
        "productId": "string",
        "status": 0,
        "availability": {
          "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
          "articleId": "123",
          "quantity": 10,
          "replenishmentTime": 14,

          "locationId": "5dc618af-af49-4adc-bccd-4d17aeff7526",
          "locationCode": "A007",
          "locationName": "Central Warehouse"
        }
      },
      "orderable": true,
      "messages": "{level=ERROR, message=Price for this item does not exist}"
    }
  ],
  "total": 1050.75,
  "discountPrice": 1000,
  "discountSum": 50.75,
  "orderable": true,
  "messages": "{level=ERROR, message=Certain items in the cart cannot be ordered}"
}


Copy-icon
Response codes
  • 200 - Операция успешна. Возвращает объект корзины.
  • 403 - Ошибка. Корзина недоступна (например, принадлежит иному пользователю).
  • 404 - Ошибка. Корзина с таким ID не найдена.
Request body sample

{
  "id": "4b7e6hjA-107b-476b-816a-51hh256a30d1",  

  "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
  "items": [
    {
      "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
      "articleId": "article1",
      "quantity": 4,
      "name": "Pencil",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1
    }
  ]
}

Copy-icon
Response sample

{
  "id": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
  "items": [
    {
      "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
      "articleId": "article1",
      "quantity": 4,
      "name": "Pencil",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1
    }
  ]
}

Copy-icon
Response codes

201 - Операция выполнена успешно. Корзина создана.

  • Удаление корзины по ее ID - DELETE запрос, /v1/carts/{id}
Request parameters

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

Copy-icon
Response sample

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

Response codes
  • 204 - Операция успешна. Корзина удалена.
  • 403 - Ошибка. Удаление запрещено (например, корзина принадлежит иному пользователю).
  • 404 - Ошибка. Корзина с указанным идентификатором не найдена.
Request parameters

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

customerId - обязательный параметр, уникальный идентификатор пользователя

Copy-icon
Request body sample

{
    "id": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
    "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
    "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
    "items":   [
       {
           "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
           "articleId": "article1",
           "quantity": 4,
           "name": "Pencil",
           "unitPrice": 1050.25,
           "discountUnitPrice": 950.25,
           "totalPrice": 4201,
           "discountPrice": 999.9,
           "discountSum": 10.1
       }
    ]
}

Copy-icon
Response sample

Отсутствует.

Response codes
  • 202 - Операция успешна. Корзина обновлена.
  • 403 - Ошибка. Обновление запрещено (например, корзина принадлежит иному пользователю).
  • 404 - Ошибка. Корзина с указанным идентификатором не найдена.
  • 422 - Ошибка. Корзина не обновлена из-за невалидных данных.
Request parameters

Отсутствуют

 

Request body sample

{
   "anonymousCartId": "string",
   "customerId": "string"

}


Copy-icon
Response sample

{
  "id": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
  "items": [
    {
      "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
      "articleId": "article1",
      "quantity": 4,
      "name": "Pencil",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1
    }
  ]
}

Copy-icon
Response codes
  • 200 - Операция успешна. Корзины объединены
  • 404 - Ошибка. Анонимная корзина не найдена.

Работа с товарами в корзине Copy-icon

Request parameters

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


Copy-icon
Request body sample

{
   "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
   "articleId": "article1",    // идентификатор товара для создания позиции

   "name": "notebook",
   "quantity": 10,
   "unitPrice": 10.01
}


Copy-icon
Response sample

Отсутствует.

Response codes
  • 201 - Операция успешна. Позиция создана. Возвращает объект всей корзине.
  • 404 - Ошибка. Корзина не найдена.
  • 409 - Ошибка. Позиция с данным articleId уже существует.
  • 422 - Ошибка. Отсутствует цена по данному товару.
  • 424 - Ошибка. Отсутствует информация по наличию данного товара.
Request parameters

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


Copy-icon
Request body sample

{
  "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
  "articleId": "article1",   // идентификатор товара для создания позиции

  "name": "notebook",
  "quantity": 10,
  "unitPrice": 10.01
}



Copy-icon
Response sample

Отсутствует.

Response codes
  • 200 - Операция успешна. Позиция создана. Возвращает общее количество товаров в корзине.
  • 422 - Ошибка. Отсутствует цена по данному товару.
  • 424 - Ошибка. Отсутствует информация по наличию данного товара.
Request parameters

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

Copy-icon
Request body sample

{
      "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
      "articleId": "article1",
      "name": "notebook",
      "quantity": 10,
      "unitPrice": 10.01

}



Copy-icon
Response sample

Отсутствует.

Response codes
  • 200 - Операция успешна. Позиция обновлена.
  • 404 - Ошибка. Позиция с указанным идентификатором не найдена.
  • 422 - Ошибка. Позиция не обновлена из-за невалидных данных.
  • 424 - Ошибка. Отсутствует информация по наличию данного товара или товара не достаточно для обеспечения заказа.
Request parameters

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


Copy-icon
Response sample

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

Response codes
  • 200 - Операция успешна. Позиция удалена. Возвращается общее количество товаров в корзине.
  • 404 - Ошибка. Позиция не найдена.