Микросервис ugc-orchestration
Микросервис ugc-orchestration предназначен для работы с отзывами клиентов на товары в каталоге. Он позволяет просматривать, искать, создавать, изменять и удалять отзывы в системах WebShop и BackOffice.
Доступ к сервису предоставляется по запросу.
Логика работы
В работе микросервиса используются сущности:
- ProductReview - содержит информацию об отзыве (идентификатор/текст/дата создания/дата модерации/статус отзыва и др.)
- Setting - содержит данные настройки (ключ,значение, описание)
Аутентификация
Аутентификация не нужна для эндпоинтов:
- Получение списка отзывов на товар - GET запрос, /v1/review/reviews
- Получение данных конкретного отзыва по его ID - GET запрос, /v1/review/review/
В других же запросах при обращении к микросервису через API необходимо в заголовке Authorization указать токен: Authorization: Bearer <токен>
Авторизация
Для работы с микросервисом в BackOffice у пользователя должна быть роль Admin или Admin_Review.
Подробнее о ролях можно узнать здесь.
Service context path
/api/ugc-orchestration/
Настройки и параметры конфигурации
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm"
}
}
// пример взят с тестового стенда
{
"env": {
"KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka",
"OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
"OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
"OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel"
}
}
Методы микросервиса
Работа с отзывами в BackOffice
- Получение отфильтрованной страницы отзывов - POST запрос, /v1/backoffice/review/page
{
"sort": [
{
"sortBy": "creationDate",
"direction": "desc"
}
],
"page":
0,
"size": 5,
"filter": {
"status": 0,
"userId": "227485734292973074"
}
}
{
"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
}
- 200 - операция выполнена успешно, получен список отзывов
- 422 - ошибка, не хватает данных или они не валидны
- Получение отфильтрованного списка отзывов - POST запрос, /v1/backoffice/review/list
{
"status": 0,
"userId": "227485734292973074"
}
[
{
"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"
}
]
- 200 - операция выполнена успешно, получен список отзывов
- 422 - ошибка, не хватает данных или они не валидны
- Получение подробной информации об отзыве (используется при переходе на подробную информацию об отзыве) - GET запрос, /v1/backoffice/review/{reviewId}
reviewId - path-параметр, обязательный: уникальный идентификатор
отзыва
{
"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
}
- 200 - операция выполнена успешно, получены данные отзыва
- 404- ошибка, отзыв с таким ID не
найден
- Изменение отзыва - PATCH запрос, /v1/backoffice/review/{reviewId}
reviewId - path-параметр, обязательный: уникальный идентификатор
отзыва
{
"authorName": "Ольга Петрова",
"comment": "Хороший термос, всем советую!!",
"isHideAuthorName": true,
"answer": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос.",
"status": 1
}
{
"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": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос."
}
- 200 - операция выполнена успешно, отзыв изменен
- 404- ошибка, отзыв с таким ID не найден
- 409 - ошибка, ID отзыва не может быть изменен
- 422 - ошибка, недостаточно данных или они не валидны
- Массовое (пакетное) изменение отзывов - PATCH запрос, /v1/backoffice/review/bulk
[
{
"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
}
}
]
[
{
"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
}
]
- 200 - операция выполнена успешно, отзывы изменены
- 404- ошибка, отзывы с такими ID не найдены
- 409 - ошибка, ID отзыва не может быть изменен
- 422 - ошибка, недостаточно данных или они не валидны
- Удаление отзыва(-ов) по ID - DELETE запрос, /v1/backoffice/review
{
"reviewIds": [
"f53c68db-918f-4d41-948b-b7f4b72ab0bf"
]
}
Отсутствует. В ответе приходит только код операции, например, 204.
- 204 - операция выполнена успешно, отзыв удален
- 422 - ошибка, отзыв не может быть удален
Работа с отзывами в WebShop
- Получение списка отзывов на товар - GET запрос, /v1/review/reviews
productId - query-параметр, обязательный: идентификатор товара
offset - query-параметр: количество строк, которые необходимо пропустить
перед началом возврата строк из запроса
count - query-параметр:
количество записей (строк) таблицы
sortOption - query-параметр: вид
сортировки отзывов
{
"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
}
]
}
200 - операция выполнена успешно, получен список отзывов на товар
- Получение отзыва по его ID - GET запрос, /v1/review/review/{reviewId}
reviewId - path-параметр, обязательный: идентификатор
отзыва
{
"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": "Спасибо за ваш отзыв! Рады, что вам понравился наш термос."
}
- 200 - операция выполнена успешно, получены данные об отзыве
- 404 - ошибка, отзыв с таким ID не найден
- Получение отзыва(-ов) по ID товара и ID пользователя (вызывается при переходе на форму оставления отзыва) - GET запрос, /v1/review/product-review
productId - query-параметр, обязательный: идентификатор товара
userId - query-параметр, обязательный: идентификатор
пользователя
{
"reviewId": "f88badbf-b5db-4224-a577-ccb282b9d269",
"productId": "1001428DC",
"status": 2,
"creationDate": "2024-03-27T09:17:29.075806"
}
200 - операция выполнена успешно, получены данные об отзыве(-ах)
- Получение отзыва(-ов) по ID товара и ID пользователя (вызывается при переходе на форму оставления отзыва) - GET запрос, /v2/review/product-review
productId - query-параметр, обязательный: идентификатор товара
{
"reviewId":"f500f517-7919-490a-a54e-661ef5c22e9e",
"productId":"1021616DC",
"status":1,
"creationDate":"2024-08-09T15:19:17.180228"
}
- 200 - операция выполнена успешно, получены данные отзыва
- 403 - ошибка, нет доступа к данным (Forbidden)
- Создание отзыва - POST запрос, /v1/review/createReview
{
"rating": 4,
"comment": "Перчатки не очень. Быстро порвались.",
"authorName": "Ольга",
"isHideAuthorName": true,
"productId": "1001428DC"
}
В ответе приходит ID созданного отзыва, например, 83674b72-1911-4b96-81ac-d90fa52e45c4
.
- 200 - операция выполнена успешно, отзыв создан и отправлен на модерацию
- 422 - ошибка, не хватает данных или они не валидны
Генерация ответов на отзывы
- Генерация ответа на отзыв - POST запрос, /v1/backoffice/chat/generateAnswer
"Не понравился мне этот товар!"
Здравствуйте!
Благодарим вас за отзыв и время, уделённое написанию комментария. Обратная связь очень важна для нас! Мы ценим ваше доверие и стараемся сделать всё возможное, чтобы каждый клиент остался доволен качеством наших услуг.
Примите наши искренние извинения за доставленные неудобства. Мы обязательно проведём работу над ошибками и примем все необходимые меры для предотвращения подобных ситуаций в будущем.
Если у вас возникнут какие-либо вопросы, непременно обращайтесь к нам снова! Всего доброго и до новых встреч.
200 - операция выполнена успешно, ответ на отзыв сгенерирован
- Получение данных о работе настройки для генерации ответов на отзывы - GET запрос, /v1/settings/{key}
key - path-параметр, обязательный: ключ настройки
{
"key": "auto_generate_answers",
"value": "false",
"description": null
}
- 200 - операция выполнена успешно, получены данные о настройке
- 404 - ошибка, настройка с таким ключом не найдена
- Изменение настройки - PUT запрос, /v1/settings/{key}
key - path-параметр, обязательный: ключ настройки
{
"key": "auto_generate_answers",
"value": "true",
"description": null
}
{
"key": "auto_generate_answers",
"value": "true",
"description": null
}
- 200 - операция выполнена успешно, данные настройки обновлены
- 404 - ошибка, настройка с таким ключом не найдена
- Создание настройки - POST запрос, /v1/settings
Отсутствуют.
{
"key": "auto_generate_answers",
"value": "true",
"description": null
}
{
"key": "auto_generate_answers",
"value": "true",
"description": null
}
201 - операция выполнена успешно, настройка создана