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

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

Микросервис ugc-orchestration предназначен для работы с отзывами клиентов на товары в каталоге. Он позволяет просматривать, искать, создавать, изменять и удалять отзывы в системах WebShop и BackOffice.

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

Логика работы Copy-icon

В работе микросервиса используются сущности:

  • ProductReview - содержит информацию об отзыве (идентификатор/текст/дата создания/дата модерации/статус отзыва и др.)
  • Setting - содержит данные настройки (ключ,значение, описание)

Аутентификация Copy-icon

Аутентификация не нужна для эндпоинтов:

  • Получение списка отзывов на товар - GET запрос, /v1/review/reviews
  • Получение данных конкретного отзыва по его ID - GET запрос, /v1/review/review/

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

Авторизация Copy-icon

Для работы с микросервисом в BackOffice у пользователя должна быть роль Admin или Admin_Review.

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

Service context path

/api/ugc-orchestration/

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

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

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

По умолчанию

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

  }
}



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

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


{
  "env": {

    "KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka",
    "OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
    "OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
    "OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel"

  }
}




Copy-icon

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

Работа с отзывами в BackOffice Copy-icon

  • Получение отфильтрованной страницы отзывов - POST запрос, /v1/backoffice/review/page
Request body sample

{
    "sort": [
        {
            "sortBy": "creationDate",
            "direction": "desc"
        }
    ],
    "page": 0,
    "size": 5,
    "filter": {
    "status": 0,
    "userId": "227485734292973074"
  }
}

Copy-icon
Response sample

{
    "content": [
        {
            "reviewId": "6f10e434-62d7-4b39-8683-44a985914261",
            "comment": "Очень хороший товар",
            "productId": "1001693DC",
            "userId": "227485734292973074",
            "authorName": "Иван",
            "isHideAuthorName": false,
            "answer": null,
            "status": 1,
            "creationDate": "2024-04-11T17:46:45.652618"
        },
        {
            "reviewId": "cdf457aa-2a91-4db5-b76a-392f8b0375f5",
            "comment": "Хороший термос, всем советую!!",
            "productId": "1001693DC",
            "userId": "227485734292973074",
            "authorName": "Ольга Петрова",
            "isHideAuthorName": true,
            "answer": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос.",
            "status": 1,
            "creationDate": "2024-04-11T15:02:11.954361"
        }
    ],
    "number": 0,
    "size": 2,
    "totalElements": 2,
    "pageable": "INSTANCE",
    "last": true,
    "totalPages": 1,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "first": true,
    "numberOfElements": 2,
    "empty": false
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получен список отзывов
  • 422 - ошибка, не хватает данных или они не валидны
  • Получение отфильтрованного списка отзывов - POST запрос, /v1/backoffice/review/list
Request body sample

{
    "status": 0,
    "userId": "227485734292973074"
}

Copy-icon
Response sample

[
    {
        "reviewId": "cdf457aa-2a91-4db5-b76a-392f8b0375f5",
        "comment": "Хороший термос, всем советую!!",
        "productId": "1001693DC",
        "userId": "227485734292973074",
        "authorName": "Ольга Петрова",
        "isHideAuthorName": true,
        "answer": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос.",
        "status": 1,
        "creationDate": "2024-04-11T15:02:11.954361"
    },
    {
        "reviewId": "6f10e434-62d7-4b39-8683-44a985914261",
        "comment": "Очень хороший товар",
        "productId": "1001693DC",
        "userId": "227485734292973074",
        "authorName": "Иван",
        "isHideAuthorName": false,
        "answer": null,
        "status": 1,
        "creationDate": "2024-04-11T17:46:45.652618"
    }
]

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получен список отзывов
  • 422 - ошибка, не хватает данных или они не валидны
  • Получение подробной информации об отзыве (используется при переходе на подробную информацию об отзыве) - GET запрос, /v1/backoffice/review/{reviewId}
Request parameters

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

Copy-icon
Response sample

{
    "reviewId": "cdf457aa-2a91-4db5-b76a-392f8b0375f5",
    "comment": "Хороший термос, всем советую!!",
    "creationDate": "2024-04-11T15:02:11.954361",
    "moderationDate": "2024-04-15T18:56:23.095144",
    "moderatorLogin": "256921651772417554",
    "userId": "227485734292973074",
    "authorName": "Ольга",
    "isHideAuthorName": false,
    "productId": "1001693DC",
    "rating": 5,
    "status": 1,
    "answer": null
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные отзыва
  • 404- ошибка, отзыв с таким ID не найден
  • Изменение отзыва - PATCH запрос, /v1/backoffice/review/{reviewId}
Request parameters

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

Copy-icon
Request body sample

{
    "authorName": "Ольга Петрова",
    "comment": "Хороший термос, всем советую!!",
    "isHideAuthorName": true,
    "answer": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос.",
    "status": 1
}

Copy-icon
Response sample

{
    "reviewId": "cdf457aa-2a91-4db5-b76a-392f8b0375f5",
    "comment": "Хороший термос, всем советую!!",
    "creationDate": "2024-04-11T15:02:11.954361",
    "moderationDate": "2024-04-19T12:12:43.520007",
    "moderatorLogin": "227485734292973074",
    "userId": "227485734292973074",
    "authorName": "Ольга Петрова",
    "isHideAuthorName": true,
    "productId": "1001693DC",
    "rating": 5,
    "status": 1,
    "answer": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос."
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, отзыв изменен
  • 404- ошибка, отзыв с таким ID не найден
  • 409 - ошибка, ID отзыва не может быть изменен
  • 422 - ошибка, недостаточно данных или они не валидны
  • Массовое (пакетное) изменение отзывов - PATCH запрос, /v1/backoffice/review/bulk
Request body sample

[
    {
        "id": "f53c68db-918f-4d41-948b-b7f4b72ab0bf",
        "updateReviewRequest": {
            "authorName": "Анна",
            "comment": "мне нравится!",
            "isHideAuthorName": false,
            "status": 2,
            "answer": null
        }
    },
    {
        "id": "f88badbf-b5db-4224-a577-ccb282b9d269",
        "updateReviewRequest": {
            "authorName": "Admin",
            "comment": "хороший товар",
            "isHideAuthorName": false,
            "status": 2,
            "answer": null
        }
    }
]

Copy-icon
Response sample

[
    {
        "reviewId": "f53c68db-918f-4d41-948b-b7f4b72ab0bf",
        "comment": "мне нравится!",
        "creationDate": "2024-03-28T11:06:25.835918",
        "moderationDate": "2024-04-19T12:18:21.209305",
        "moderatorLogin": "227485734292973074",
        "userId": "202011779088279058",
        "authorName": "Анна",
        "isHideAuthorName": false,
        "productId": "1001584DC",
        "rating": 4,
        "status": 2,
        "answer": null
    },
    {
        "reviewId": "f88badbf-b5db-4224-a577-ccb282b9d269",
        "comment": "хороший товар",
        "creationDate": "2024-03-27T09:17:29.075806",
        "moderationDate": "2024-04-19T12:18:21.218865",
        "moderatorLogin": "227485734292973074",
        "userId": "202277231504942610",
        "authorName": "Admin",
        "isHideAuthorName": false,
        "productId": "1001428DC",
        "rating": 5,
        "status": 2,
        "answer": null
    }
]

Copy-icon
Response codes
  • 200 - операция выполнена успешно, отзывы изменены
  • 404- ошибка, отзывы с такими ID не найдены
  • 409 - ошибка, ID отзыва не может быть изменен
  • 422 - ошибка, недостаточно данных или они не валидны
  • Удаление отзыва(-ов) по ID - DELETE запрос, /v1/backoffice/review
Request body sample

{
    "reviewIds": [
        "f53c68db-918f-4d41-948b-b7f4b72ab0bf"
    ]
}

Copy-icon
Response sample

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

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

Работа с отзывами в WebShop Copy-icon

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

productId - query-параметр, обязательный: идентификатор товара
offset - query-параметр: количество строк, которые необходимо пропустить перед началом возврата строк из запроса
count - query-параметр: количество записей (строк) таблицы
sortOption - query-параметр: вид сортировки отзывов

Copy-icon
Response sample

{
    "total": 2,
    "quantity": 2,
    "reviewsLeft": 0,
    "reviews": [
        {
            "reviewId": "4840d81a-9078-44af-9540-e3d527cb1072",
            "authorName": "Admin",
            "isHideAuthorName": false,
            "creationDate": "2024-03-27T09:15:37.030134",
            "rating": 4,
            "comment": "     супер товар",
            "productId": "1001428DC",
            "moderationDate": "2024-03-27T09:16:46.508325",
            "moderatorLogin": "202277231504942610",
            "answer": null
        },
        {
            "reviewId": "b2f9a4ee-0b8b-4e46-965e-495ef405859d",
            "authorName": "Анна",
            "isHideAuthorName": false,
            "creationDate": "2024-03-22T14:28:44.261234",
            "rating": 5,
            "comment": "нравится!!",
            "productId": "1001428DC",
            "moderationDate": "2024-04-15T18:52:31.209075",
            "moderatorLogin": "256921651772417554",
            "answer": null
        }
    ]
}

Copy-icon
Response codes

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

  • Получение отзыва по его ID - GET запрос, /v1/review/review/{reviewId}
Request parameters

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

Copy-icon
Response sample

{
  "reviewId": "cdf457aa-2a91-4db5-b76a-392f8b0375f5",
  "authorName": "Ольга Петрова",
  "isHideAuthorName": true,
  "creationDate": "2024-04-11T15:02:11.954361",
  "rating": 5,
  "comment": "Хороший термос, всем советую!!",
  "productId": "1001693DC",
  "moderationDate": "2024-04-19T12:12:43.520007",
  "moderatorLogin": "227485734292973074",
  "answer": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос."
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные об отзыве
  • 404 - ошибка, отзыв с таким ID не найден
  • Получение отзыва(-ов) по ID товара и ID пользователя (вызывается при переходе на форму оставления отзыва) - GET запрос, /v1/review/product-review
Request parameters

productId - query-параметр, обязательный: идентификатор товара
userId - query-параметр, обязательный: идентификатор пользователя

Copy-icon
Response sample

{
  "reviewId": "f88badbf-b5db-4224-a577-ccb282b9d269",
  "productId": "1001428DC",
  "status": 2,
  "creationDate": "2024-03-27T09:17:29.075806"
}

Copy-icon
Response codes

200 - операция выполнена успешно, получены данные об отзыве(-ах)

  • Получение отзыва(-ов) по ID товара и ID пользователя (вызывается при переходе на форму оставления отзыва) - GET запрос, /v2/review/product-review
Request parameters

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

Copy-icon
Response sample

{
   "reviewId":"f500f517-7919-490a-a54e-661ef5c22e9e",
   "productId":"1021616DC",
   "status":1,
   "creationDate":"2024-08-09T15:19:17.180228"
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные отзыва
  • 403 - ошибка, нет доступа к данным (Forbidden)
  • Создание отзыва - POST запрос, /v1/review/createReview
Request body sample

{
    "rating": 4,
    "comment": "Перчатки не очень. Быстро порвались.",
    "authorName": "Ольга",
    "isHideAuthorName": true,
    "productId": "1001428DC"
}

Copy-icon
Response sample

В ответе приходит ID созданного отзыва, например, 83674b72-1911-4b96-81ac-d90fa52e45c4.

Response codes
  • 200 - операция выполнена успешно, отзыв создан и отправлен на модерацию
  • 422 - ошибка, не хватает данных или они не валидны

Генерация ответов на отзывы Copy-icon

  • Генерация ответа на отзыв - POST запрос, /v1/backoffice/chat/generateAnswer
Request body sample

"Не понравился мне этот товар!"

Copy-icon
Response sample

Здравствуйте!

Благодарим вас за отзыв и время, уделённое написанию комментария. Обратная связь очень важна для нас! Мы ценим ваше доверие и стараемся сделать всё возможное, чтобы каждый клиент остался доволен качеством наших услуг.

Примите наши искренние извинения за доставленные неудобства. Мы обязательно проведём работу над ошибками и примем все необходимые меры для предотвращения подобных ситуаций в будущем.

Если у вас возникнут какие-либо вопросы, непременно обращайтесь к нам снова! Всего доброго и до новых встреч.

Copy-icon
Response codes

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

  • Получение данных о работе настройки для генерации ответов на отзывы - GET запрос, /v1/settings/{key}
Request parameters

key - path-параметр, обязательный: ключ настройки

Copy-icon
Response sample
{
  "key": "auto_generate_answers",
  "value": "false",
  "description": null
}
Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные о настройке
  • 404 - ошибка, настройка с таким ключом не найдена
  • Изменение настройки - PUT запрос, /v1/settings/{key}
Request parameters

key - path-параметр, обязательный: ключ настройки

Copy-icon
Request body sample

{
  "key": "auto_generate_answers",
  "value": "true",
  "description": null
}
Copy-icon
Response sample

{
  "key": "auto_generate_answers",
  "value": "true",
  "description": null
}

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

Отсутствуют.

Request body sample

{
  "key": "auto_generate_answers",
  "value": "true",
  "description": null
}
Copy-icon
Response sample

{
  "key": "auto_generate_answers",
  "value": "true",
  "description": null
}

Copy-icon
Response codes

201 - операция выполнена успешно, настройка создана