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

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

Микросервис cart предоставляет функционал по работе с корзиной:

  • создание корзины
  • добавление/удаление товара в/из корзины
  • обновление корзины
  • отображение страницы со списком всех корзин

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

Логика работы

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

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

Аутентификация

При обращении к микросервису cart через API в запросах на отображение страницы со списком корзин (GET /v1/carts) необходимо в заголовке Authorization указывать токен: Authorization: Bearer <токен>.

Для остальных запросов аутентификация не нужна.

Авторизация

Для работы с разделом “Корзины” в BackOffice у пользователя должна быть роль Admin и/или Admin_Cart.

Подробнее о ролях можно узнать здесь.

Service context path

/api/cart/

Настройки и параметры конфигурации 

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

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

По умолчанию

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

    "LOGGING_LEVEL": "уровень_логирования",
    "POSTGRES_DATABASE": "cart",
    "POSTGRES_MIGRATION_USER": "cart_migration",
    "POSTGRES_PORT": "5432",
    "POSTGRES_USER": "cart_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

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

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

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

page - query-параметр: номер страницы
size - query-параметр: количество отображаемых на странице элементов
sort - query-параметр: сортировка элементов на странице

Copy-icon
Response sample

{
    "content": [
        {
            "id": "1-31102023000008",
            "customerId": "202277231504942610",
            "currencyId": "0a46630e-76d7-4eb3-b12a-79317dc871d7",
            "items": []
        },
        {
            "id": "1-31102023000009",
            "customerId": "202277231504942610",
            "currencyId": "df76baa7-93a2-458a-9ae5-240d67eb427f",
            "items": [
                {
                    "id": "5f635a37-013b-406d-bdbe-0b7576643c50",
                    "articleId": "1000002",
                    "quantity": 1.00,
                    "unitPrice": 25.00,
                    "discountUnitPrice": 25.00,
                    "totalPrice": 25.00,
                    "discountPrice": 25.00,
                    "discountSum": 0.00
                }
            ]
        },
        {
            "id": "1-31102023000010",
            "customerId": "202277231504942610",
            "currencyId": "5947d0e8-550e-4b50-ab80-b165d03bacd0",
            "items": [
                {
                    "id": "3bf2b2c5-d34b-4c62-8bd2-30a2e5826836",
                    "articleId": "1000005",
                    "quantity": 1.00,
                    "unitPrice": 20.00,
                    "discountUnitPrice": 9.40,
                    "totalPrice": 20.00,
                    "discountPrice": 9.40,
                    "discountSum": 10.60
                }
            ]
        },
        {
            "id": "1-31102023000011",
            "customerId": "202277231504942610",
            "currencyId": "df76baa7-93a2-458a-9ae5-240d67eb427f",
            "items": []
        }
    ],
    "pageable": {
        "sort": {
            "unsorted": true,
            "sorted": false,
            "empty": true
        },
        "pageNumber": 0,
        "pageSize": 4,
        "offset": 0,
        "unpaged": false,
        "paged": true
    },
    "last": false,
    "totalPages": 1644,
    "totalElements": 6574,
    "first": true,
    "numberOfElements": 4,
    "sort": {
        "unsorted": true,
        "sorted": false,
        "empty": true
    },
    "size": 4,
    "number": 0,
    "empty": false
}

Copy-icon
Response codes

200 - операция успешно выполнена, получена страница со списком корзин

  • Получение корзины по ее ID - GET запрос, /v1/carts/{id}
Request parameters

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

Copy-icon
Response sample

{
  "id": "1-31102023000010",
  "customerId": "202277231504942610",
  "currencyId": "5947d0e8-550e-4b50-ab80-b165d03bacd0",
  "items": [
    {
      "id": "3bf2b2c5-d34b-4c62-8bd2-30a2e5826836",
      "articleId": "1000005",
      "quantity": 1,
      "unitPrice": 20,
      "discountUnitPrice": 9.4,
      "totalPrice": 20,
      "discountPrice": 9.4,
      "discountSum": 10.6
    }
  ]
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена, получены данные корзины
  • 404 - ошибка, корзина не найдена
  • Создание корзины - POST запрос, /v1/carts
Request body sample

{
  "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1",
  "currencyId": "0d449436-2702-4051-8a85-e3ec5b645959",
  "items": [
    {
      "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
      "articleId": "100340DC",
      "quantity": 4,
      "name": "Футболка мужская",
      "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": "100340DC",
      "quantity": 4,
      "name": "Футболка мужская",
      "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 - операция успешно выполнена, корзина удалена
  • 404 - ошибка, корзина с таким ID не найдена
  • Обновление корзины - PATCH, запрос /v1/carts/{id}
Request parameters

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

Copy-icon
Request body sample

{
  "cart": {
    "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": "100340DC",
        "quantity": 4,
        "name": "Футболка мужская",
        "unitPrice": 1050.25,
        "discountUnitPrice": 950.25,
        "totalPrice": 4201,
        "discountPrice": 999.9,
        "discountSum": 10.1
      }
    ]
  },
  "customerId": "4b7e6hjA-107b-476b-816a-51hh256a30d1"
}

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": "100340DC",
      "quantity": 4,
      "name": "Футболка мужская",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1
    }
  ]
}

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

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

  • Получение данных конкретного товара в конкретной корзине (по ID корзины и товара) - GET запрос, /v1/carts/{id}/items/{itemId}
Request parameters

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

Copy-icon
Response sample

{
  "id": "3bf2b2c5-d34b-4c62-8bd2-30a2e5826836",
  "articleId": "1000005",
  "quantity": 1,
  "unitPrice": 20,
  "discountUnitPrice": 9.4,
  "totalPrice": 20,
  "discountPrice": 9.4,
  "discountSum": 10.6
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена, получены данные товары
  • 404 - ошибка, товар с таким itemId не найден
  • Получение данных конкретного товара в конкретной корзине (по ID корзины и артикулу товара) - GET запрос, /v1/carts/{id}/items/by-article-id/{articleId}
Request parameters

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

Copy-icon
Response sample

{
  "id": "3bf2b2c5-d34b-4c62-8bd2-30a2e5826836",
  "articleId": "1000005",
  "quantity": 1,
  "unitPrice": 20,
  "discountUnitPrice": 9.4,
  "totalPrice": 20,
  "discountPrice": 9.4,
  "discountSum": 10.6
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена, получены данные товары
  • 404 - ошибка, товар не найден
  • Создание позиции в корзине - POST запрос, /v1/carts/{id}/items
Request parameters

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

Copy-icon
Request body sample

{
  "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
  "articleId": "100430DC",
  "quantity": 4,
  "name": "Майка спортивная",
  "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": "100430DC",
      "quantity": 4,
      "name": "Майка спортивная",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1
    }
  ]
}

Copy-icon
Response codes
  • 200 - товар уже находился в корзине, было обновлено количество товара
  • 201 - операция успешна, позиция добавлена в корзину
  • 404 - ошибка, корзина не найдена.
  • 409 - ошибка, позиция с данным articleId уже существует
  • Обновление товара в корзине - PATCH запрос, /v1/carts/{id}/items
Request parameters

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

Copy-icon
Request body sample

{
  "id": "2e5c9ba8-956e-476b-816a-49ee128a40c9",
  "articleId": "100430DC",
  "quantity": 4,
  "name": "Майка спортивная",
  "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": "100430DC",
      "quantity": 4,
      "name": "Майка спортивная",
      "unitPrice": 1050.25,
      "discountUnitPrice": 950.25,
      "totalPrice": 4201,
      "discountPrice": 999.9,
      "discountSum": 10.1
    }
  ]
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена, товар обновлен в корзине
  • 404 - ошибка, товар не найден
  • 422 - ошибка, отсутствуют обязательные данные
  • Удаление товара из корзины - DELETE запрос, /v1/carts/{id}/items/{itemId}
Request parameters

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

Copy-icon
Response sample

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

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

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

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