Микросервис cart-orchestration
Микросервис cart-orchestration предоставляет функционал по работе с корзиной: создание корзины, добавление/удаление товара в/из корзины, обновление корзины, листинг всех корзин.
Доступ к сервису предоставляется по запросу.
Логика работы
В работе микросервиса участвуют следующие сущности:
- Корзина (Cart) - содержит данные конкретной корзине (id корзины, id пользователя, id валюты, список товаров в корзине)
- Товар в корзине (CartItem) - содержит данные о товарах в конкретной корзине (id товара, количество товара в штуках, название товара, цена за одну штуку, цена со скидкой за 1 штуку, итоговая цена товара с учетом его количества, итоговая цена товара с учетом скидки, итоговая скидка и др.)
Аутентификация
При обращении к микросервису через
API в запросах необходимо в заголовке Authorization указать
токен: Authorization: Bearer
<токен>
.
Service context path
/api/cart-orchestration/
Настройки и параметры конфигурации
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm"
}
}
// пример взят с тестового стенда
{
"env": {
"OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
"OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
"OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel"
}
}
pageable object // обязательный параметр, разбивает результат на
страницы, указывает, по какому свойству и порядок сортировки
{
"page": 0, // номер страницы
"size": 1, // количество показываемых
элементов
"sort": [ // параметр
сортировки, по какому свойству идет сортировка и ее порядок
"id,asc"
]
}
{
"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
}
]
}
200 - Операция успешна. Отдает или массив объектов (если есть информация), или пустой массив (если информации по задаваемым параметрам нет).
- Получение конкретной корзины (обновленная по данным корзина) - GET запрос, /api/cart-orchestration/v1/carts/{id}/repriced
id // обязательный path-параметр, идентификатор корзины
currencyId // необязательный параметр, идентификатор валюты. Если указан, то возвращает цены по товарам только в указанной валюте.
{
"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}"
}
- 200 - Операция успешна. Возвращает объект корзины.
- 403 - Ошибка. Корзина недоступна (например, принадлежит иному пользователю).
- 404 - Ошибка. Корзина с таким ID не
найдена.
- Создание корзины (версия с мультивариативными товарами) - POST запрос, /v2/carts
{
"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
}
]
}
{
"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
}
]
}
201 - Операция выполнена успешно. Корзина создана.
- Удаление корзины по ее ID - DELETE запрос, /v1/carts/{id}
id - path-параметр, обязательный, уникальный идентификатор корзины
Отсутствует. В ответе приходит только код операции, например, 204.
- 204 - Операция успешна. Корзина удалена.
- 403 - Ошибка. Удаление запрещено (например, корзина принадлежит иному пользователю).
- 404 - Ошибка. Корзина с
указанным идентификатором не найдена.
- Обновление корзины (версия с мультивариативными товарами) -- PATCH запрос, /v2/carts/{id}
id - path-параметр, обязательный: уникальный идентификатор корзины
customerId - обязательный параметр, уникальный идентификатор пользователя
{
"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
}
]
}
Отсутствует.
- 202 - Операция успешна. Корзина обновлена.
- 403 - Ошибка. Обновление запрещено (например, корзина принадлежит иному пользователю).
- 404 - Ошибка. Корзина с указанным идентификатором не найдена.
- 422 - Ошибка. Корзина не обновлена из-за невалидных данных.
- Объединение анонимной корзины с корзиной пользователя (версия с мультивариативными товарами) -- PATCH запрос, /v1/carts/merge
Отсутствуют
{
"anonymousCartId": "string",
"customerId": "string"
}
{
"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
}
]
}
- 200 - Операция успешна. Корзины объединены
- 404 - Ошибка. Анонимная корзина не найдена.
Работа с товарами в корзине
- Создание позиции в корзине (версия с мультивариативными товарами) - POST запрос, /v2/carts/{id}/items
id // path-параметр, обязательный, идентификатор корзины
{
"id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
"articleId": "article1", // идентификатор товара для создания позиции
"name": "notebook",
"quantity": 10,
"unitPrice": 10.01
}
Отсутствует.
- 201 - Операция успешна. Позиция создана. Возвращает объект всей корзине.
- 404 - Ошибка. Корзина не найдена.
- 409 - Ошибка. Позиция с данным articleId уже существует.
- 422 - Ошибка. Отсутствует цена по данному товару.
- 424 - Ошибка. Отсутствует информация по наличию данного товара.
- Создание/обновление позиции в корзине (версия с мультивариативными товарами) - PUT запрос, /v2/carts/{id}/items
id // path-параметр, обязательный, идентификатор корзины
{
"id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
"articleId": "article1", // идентификатор товара для создания позиции
"name": "notebook",
"quantity": 10,
"unitPrice": 10.01
}
Отсутствует.
- 200 - Операция успешна. Позиция создана. Возвращает общее количество товаров в корзине.
- 422 - Ошибка. Отсутствует цена по данному товару.
- 424 - Ошибка. Отсутствует информация по наличию данного товара.
- Обновление позиции в корзине (версия с мультивариативными товарами) - PATCH запрос, /v2/carts/{id}/items
id - path-параметр, обязательный: уникальный
идентификатор корзины
{
"id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
"articleId": "article1",
"name": "notebook",
"quantity": 10,
"unitPrice": 10.01
}
Отсутствует.
- 200 - Операция успешна. Позиция обновлена.
- 404 - Ошибка. Позиция с указанным идентификатором не найдена.
- 422 - Ошибка. Позиция не обновлена из-за невалидных данных.
- 424 - Ошибка. Отсутствует информация по наличию данного товара или товара не достаточно для обеспечения заказа.
- Удаление позиции в корзине (версия с мультивариативными товарами) - DELETE запрос, /v2/carts/{id}/items/{itemId}
id // path-параметр, обязательный, идентификатор корзины
itemId // path-параметр, обязательный, идентификатор позиции
Отсутствует. В ответе приходит только код операции, например, 204.
- 200 - Операция успешна. Позиция удалена. Возвращается общее количество товаров в корзине.
- 404 - Ошибка. Позиция не найдена.