Микросервис 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"
]
}
{
"content": [ //
содержит массив корзин (в соответствии с запросом показан 1 объект),
отсортированных по id по возрастанию
{
"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
}
]
}
],
"pageable": {
"sort": {
"unsorted": false,
"sorted": true,
"empty": false
},
"pageNumber": 0,
"pageSize": 1,
"offset": 0,
"paged": true,
"unpaged": false
},
"last":
false,
"totalPages": 51,
"totalElements": 151,
"first": true,
"numberOfElements": 1,
"sort": {
"unsorted": false,
"sorted": true,
"empty": false
},
"size": 1,
"number": 0,
"empty": false
}
200 - Операция успешна. Отдает или массив объектов (если есть информация), или пустой массив (если информации по задаваемым параметрам нет).
- Получение конкретной корзины (обновленная по данным корзина) - GET запрос, /api/cart-orchestration/v1/carts/{id}/repriced
id // обязательный параметр, идентификатор корзины
customerId // обязательный параметр, идентификатор пользователя
корзины
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
}
},
"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
{
"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-параметр, обязательный: уникальный
идентификатор корзины
{
"cartDto": {
"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
}
]
},
"customerId": "string"
}
Отсутствует.
- 200 - Операция успешна. Корзина обновлена.
- 403 - Ошибка. Обновление запрещено (например, корзина принадлежит иному пользователю).
- 404 - Ошибка. Корзина с указанным идентификатором не найдена.
- 422 - Ошибка. Корзина не обновлена из-за невалидных данных.
Работа с товарами в корзине
- Создание позиции в корзине (версия с мультивариативными товарами) - POST запрос, /v2/carts/{id}/items
id // обязательный параметр, идентификатор корзины
{
"articleId": "1000419DC",
// идентификатор товара для создания позиции
"quantity": 1,
"price": 300,
"unitPrice": 300
}
Отсутствует.
- 201 - Операция успешна. Позиция создана. Возвращает объект всей корзине.
- 404 - Ошибка. Корзина не найдена.
- 409 - Ошибка. Позиция с данным articleId уже существует.
- 422 - Ошибка. Отсутствует цена по данному товару.
- 424 - Ошибка. Отсутствует информация по наличию данного товара.
- Создание/обновление позиции в корзине (версия с мультивариативными товарами) - PUT запрос, /v2/carts/{id}/items
id // обязательный параметр, идентификатор корзины
{
"articleId": "1000419DC",
// идентификатор товара для создания позиции
"quantity": 1,
"price": 300,
"unitPrice": 300
}
Отсутствует.
- 200 - Операция успешна. Позиция создана. Возвращает общее количество товаров в корзине.
- 422 - Ошибка. Отсутствует цена по данному товару.
- 424 - Ошибка. Отсутствует информация по наличию данного товара.
- Обновление позиции в корзине (версия с мультивариативными товарами) - PATCH запрос, /v2/carts/{id}/items
id // обязательный параметр, идентификатор корзины
{
"id":
"e93e3743-5cfb-4f7e-ad0a-36e0ffb4125d",
"articleId": "1000419DC",
"name":
"Кроссы",
"price": 300,
"unitPrice": 300,
"quantity":
2
}
Отсутствует.
- 200 - Операция успешна. Позиция обновлена. Возвращает общее количество товаров в корзине.
- 404 - Ошибка. Позиция не найдена.
- 422 - Ошибка. Отсутствует цена по данному товару.
- 424 - Ошибка. Отсутствует информация по наличию данного товара.
- Удаление позиции в корзине (версия с мультивариативными товарами) - DELETE запрос, /v2/carts/{id}/items/{itemId}
id // обязательный параметр, идентификатор корзины
itemId
// обязательный параметр, идентификатор позиции
Отсутствует. В ответе приходит только код операции, например, 204.
- 200 - Операция успешна. Позиция удалена. Возвращается общее количество товаров в корзине.
- 404 - Ошибка. Позиция не найдена.