Микросервис user-orchestration
Микросервис user-orchestration предоставляет функциональность для управления клиентами интернет-магазина (получение списка пользователей, а также их создание и редактирование) и списком их действий в системе интернет-магазина.
Доступ к сервису предоставляется по запросу.
Логика работы
В работе микросервиса задействованы следующие сущности:
- User - возвращает информацию о пользователе WebShop (id пользователя, имя, фамилия, телефон, электронная почта, пол, дата и время регистрации, адрес)
- Address - возвращает информацию о адресе доставки пользователя (id адреса, имя, фамилия, компания, улица, город, индекс и страна получателя заказа)
- InitiateUserCreationRequest - используется для создания временного пользователя во время регистрации
- UserAccount - модель, возвращающая информацию об аккаунте пользователя
- Расширенное событие (EnrichedEvent) - содержит информацию о действии, совершенном пользователем (ID пользователя; сущность, к которой относится действие; дата и время совершения действия; email пользователя и др.)
Аутентификация
При обращении к микросервису через API в запросах необходимо в заголовке Authorization указывать токен: Authorization: Bearer <токен>
.
Авторизация
Для работы с микросервисом у пользователя должна быть роль Admin, Admin_User (для доступа к разделу "Пользователи" в BackOffice) или Admin_Log_View (для доступа к разделу "Журнал действий" в BackOffice). Подробнее о ролях пользователей можно узнать здесь.
Service context path
/api/user-orchestration/
Настройки и параметры конфигурации
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm"
}
}
// пример взят с тестового стенда
{
"env": {
"KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka",
"OAUTH_ECOM_BLACKLIST_TYPE": "информация_о_черном_списке_ECOM_OAuth",
"OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
"OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
"OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel",
"ZITADEL_SERVICE_USER_TOKEN": "url_доступа_к_Zitadel",
"ZITADEL_URL": "url_доступа_к_Zitadel"
}
}
Методы микросервиса
Работа с пользователями
- Получение страницы со списком пользователей (с возможностью пагинации и фильтрации) - GET запрос, /v1/users
searchTerm - query-параметр: поисковый запрос
id - query-параметр: ID пользователя
firstName - query-параметр: имя пользователя
lastName - query-параметр: фамилия пользователя
email - query-параметр: электронная почта пользователя
registrationTime - query-параметр: дата регистрации пользователя
phone - query-параметр: телефон пользователя
page - query-параметр: номер страницы
size - query-параметр: количество отображаемых на странице элементов
sort - query-параметр: сортировка элементов на странице
{
"content": [
{
"id":
"227475699168995079",
"firstName":
"Иван",
"lastName": "Жуков",
"email": "ivan@mail.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-08-15T06:54:59.407",
"registrationCompleted": true,
"addressDto": {
"id":
"69",
"firstName":
"Иван",
"lastName":
"Жуков",
"company":
"МКомпаниТест",
"address": "ул. Большая Якиманка, 30",
"city": "Москва",
"zipCode": "110180",
"poBox": "22",
"country": "Россия"
}
},
{
"id":
"227486618502588167",
"firstName":
"Мария",
"lastName":
"Иванова",
"phone":
"+375298088880",
"email":
"ivanova1@pochta.ru",
"gender":
"ANONYMOUS",
"registrationTime":
"2023-08-15T08:38:55.639",
"registrationCompleted": true,
"addressDto": {
"id":
"77",
"firstName":
"Мария",
"lastName":
"Иванова",
"company":
"ООО \"ТэкнолоджиСервис\"",
"address": "Брестская",
"city": "Минск",
"zipCode": "220415",
"poBox": "12345678",
"country": "Беларусь"
}
}
],
"pageable": {
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"pageNumber": 0,
"pageSize": 10,
"offset": 0,
"paged": true,
"unpaged": false
},
"last":
false,
"totalPages": 4,
"totalElements": 35,
"first": true,
"numberOfElements": 2,
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"size": 10,
"number": 0,
"empty": false
}
200 - операция успешно выполнена, получена страница со списком покупателей
- Получение отфильтрованного/отсортированного списка пользователей интернет-магазина - POST запрос, /v1/users/list
{
"page": 3,
"size": 10,
"sort": [
{
"sortBy": "id",
"direction": "asc"
}
],
"filter": {}
}
{
"content": [
{
"id": "209543151025677842",
"firstName": "Петр",
"lastName": "Фоменко",
"phone": "1",
"email": "al24@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-13T13:44:47.961",
"registrationCompleted": true,
"addressDto": {
"id": "149",
"firstName": "Петр",
"lastName": "Фоменко",
"company": "1",
"address":
"1",
"city": "1",
"zipCode":
"1",
"poBox": "1",
"country": "1"
}
},
{
"id":
"209543279992137234",
"firstName": "Петр",
"lastName": "Семенов",
"phone": "1",
"email": "al25@digitalchief.ru",
"gender":
"ANONYMOUS",
"registrationTime": "2023-04-13T13:46:07.065",
"registrationCompleted": true,
"addressDto": {
"id": "154",
"firstName": "Петр",
"lastName": "Семенов",
"company": "1",
"address": "1",
"city":
"1",
"zipCode": "1",
"poBox": "1",
"country": "1"
}
},
{
"id": "209543410065892882",
"firstName": "Василина",
"lastName": "Фоменко",
"phone":
"+375291112233",
"email": "al26@digitalchief.ru",
"gender":
"ANONYMOUS",
"registrationTime": "2023-04-13T13:47:15.401",
"registrationCompleted": true,
"addressDto": {
"id": "159",
"firstName": "Василина",
"lastName": "Фоменко",
"company":
"1",
"address": "1",
"city": "1",
"zipCode": "1",
"poBox": "1",
"country": "1"
}
},
{
"id": "209543524218070546",
"firstName": "Сергей",
"lastName": "Фоменко",
"phone": "1",
"email": "al27@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-13T13:48:29.378",
"registrationCompleted": true,
"addressDto": {
"id": "164",
"firstName": "Сергей",
"lastName": "Фоменко",
"company": "1",
"address":
"1",
"city": "1",
"zipCode":
"1",
"poBox": "1",
"country": "1"
}
},
{
"id":
"209543658351912466",
"firstName": "Николай",
"lastName": "Макаров",
"phone": "1",
"email": "al28@digitalchief.ru",
"gender":
"ANONYMOUS",
"registrationTime": "2023-04-13T13:49:52.897",
"registrationCompleted": true,
"addressDto": {
"id": "169",
"firstName": "Николай",
"lastName": "Макаров",
"company": "1",
"address": "1",
"city":
"1",
"zipCode": "1",
"poBox": "1",
"country": "1"
}
},
{
"id": "209543784315250194",
"firstName": "Кирилл",
"lastName": "Семенов",
"phone": "1",
"email": "al29@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-13T13:51:08.2",
"registrationCompleted": true,
"addressDto": {
"id": "174",
"firstName": "Кирилл",
"lastName": "Семенов",
"company": "1",
"address":
"1",
"city": "1",
"zipCode":
"1",
"poBox": "1",
"country": "1"
}
},
{
"id":
"209543914271565330",
"firstName": "Олег",
"lastName": "Никифоров",
"phone": "1",
"email": "al30@digitalchief.ru",
"gender":
"ANONYMOUS",
"registrationTime": "2023-04-13T13:52:20.375",
"registrationCompleted": true,
"addressDto": {
"id": "179",
"firstName": "Олег",
"lastName": "Никифоров",
"company": "1",
"address": "1",
"city":
"1",
"zipCode": "1",
"poBox": "1",
"country": "1"
}
},
{
"id": "209546030029497874",
"firstName": "Иван Жуков",
"lastName": "Жуков",
"phone": "+7 495
777-17-17",
"email": "al40@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime": "2023-04-13T14:15:27.325",
"registrationCompleted": true,
"addressDto": {
"id": "184",
"firstName": "Иван Жуков",
"lastName": "Жуков",
"company":
"\"Доставка на дом\"",
"address": "Новая",
"city": "Москва",
"zipCode":
"158",
"poBox": "15848",
"country": "Россия"
}
},
{
"id":
"210579427229197842",
"firstName": "Иван",
"lastName": "Жуков",
"phone": "+74994033206",
"email": "al5@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime": "2023-04-20T17:21:12.82",
"registrationCompleted": true,
"addressDto": {
"id": "198",
"firstName": "Иван",
"lastName": "Жуков",
"company": "Макроторг",
"address": "Лесная",
"city":
"Москва",
"zipCode": "7896756",
"poBox": "123456",
"country": "РФ"
}
},
{
"id": "210682325971789330",
"firstName": "Иван",
"lastName": "Жуков",
"phone": "+7 499 403 32 05",
"email": "al5@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-21T10:22:54.565",
"registrationCompleted": true,
"addressDto": {
"id": "203",
"firstName": "Иван",
"lastName": "Жуков",
"company": "СДЕК",
"address":
"ЛЕсная",
"city": "Москва",
"zipCode": "76545",
"poBox": "123456",
"country": "Рф"
}
}
],
"number": 3,
"size": 10,
"totalElements": 100,
"pageable": {
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"pageNumber": 3,
"pageSize": 10,
"offset": 30,
"paged": true,
"unpaged": false
},
"last":
false,
"totalPages": 10,
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"first": false,
"numberOfElements": 10,
"empty": false
}
200 - операция выполнена успешно, получен список покупателей
- Получение пользователя по его ID - GET запрос, /v1/users/{id}
id - path-параметр, обязательный: ID пользователя
{
"id": "209543410065892882",
"firstName": "Василина",
"lastName": "Фоменко",
"phone":
"1",
"email": "al26@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime": "2023-04-13T13:47:15.401",
"registrationCompleted": true,
"addressDto": {
"id": "159",
"firstName": "Василина",
"lastName": "Фоменко",
"company": "1",
"address": "1",
"city": "1",
"zipCode": "1",
"poBox": "1",
"country": "1"
}
}
- 200 - операция выполнена успешно, получены данные о покупателе
- 404 - ошибка, покупатель с
таким ID не найден
- Получение данных аккаунта пользователя из e-com - GET запрос, /v1/users/account
userId - query-параметр: идентификатор пользователя
{
"externalId":
"227485734292973074",
"email":
"ivanova@pochta.ru",
"firstName":
"Ольга",
"lastName": "Иванова",
"phone": null,
"gender": "ANONYMOUS"
}
- 200 - операция выполнена успешно, получены данные профиля пользователя
- 404 - ошибка, пользователь не
найден
- Изменение данных пользователя - PATCH запрос, /v1/users/{id}
id - path-параметр, обязательный: ID пользователя
{
"id": "261852074277365266",
"lastName": "Огуречкин",
"addressDto": {
"id": "769",
"firstName": "Глеб",
"lastName": "Огурцов",
"company": "Крайнет",
"address": "Центральная",
"city": "Минск",
"zipCode": "123456",
"poBox": "11234",
"country": "Беларусь"
}
}
{
"id": "261852074277365266",
"firstName": "Глеб",
"lastName": "Огуречкин",
"phone":
null,
"email": "ogurcov@pochta.ru",
"gender": "ANONYMOUS",
"registrationTime": "2024-04-08T10:32:09.257",
"registrationCompleted": true,
"addressDto": {
"id": "769",
"firstName": "Глеб",
"lastName": "Огурцов",
"company": "Крайнет",
"address": "Центральная",
"city": "Минск",
"zipCode": "123456",
"poBox": "11234",
"country": "Беларусь"
}
}
- 200 - операция выполнена успешно, данные о клиенте обновлены
- 404 - ошибка, клиент с таким ID не найден
- 422 - ошибка, отсутствуют обязательные данные
- Создание пользователя - POST запрос, /v1/users
{
"id": "208084200379672082",
"firstName": "Иван",
"lastName": "Иванов",
"phone": "123",
"email": "al3@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-03T12:15:23.02",
"registrationCompleted": true,
"addressDto": {
"id": "43",
"firstName": "Иван",
"lastName": "Иванов",
"company": "CompanyCO",
"address":
"Длинная",
"city": "Москва",
"zipCode": "12",
"poBox": "1235",
"country": "Россия"
}
}
{
"id": "208084200379672082",
"firstName": "Иван",
"lastName": "Иванов",
"phone": "123",
"email": "al3@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-03T12:15:23.02",
"registrationCompleted": true,
"addressDto": {
"id": "43",
"firstName": "Иван",
"lastName": "Иванов",
"company": "CompanyCO",
"address":
"Длинная",
"city": "Москва",
"zipCode": "12",
"poBox": "1235",
"country": "Россия"
}
}
- 201 - операция выполнена успешно, пользователь создан
- 409 - ошибка, пользователь с таким id уже существует
- 422 - ошибка, отсутствует обязательная информация
- Запуск регистрации пользователя - POST запрос, /v1/users/initiate
{
"externalId": "261974313576457746",
"email": "lenina@pochta.ru"
}
{
"id": "261974313576457746",
"firstName": null,
"lastName": null,
"phone": null,
"email": "lenina@pochta.ru",
"gender": "ANONYMOUS",
"registrationTime": null,
"registrationCompleted": false,
"addressDto":
{
"id": "774",
"firstName": null,
"lastName": null,
"company": null,
"address": null,
"city": null,
"zipCode": null,
"poBox": null,
"country": null
}
}
- 201 - операция выполнена успешно, запущен процесс регистрации пользователя
- 409 - ошибка, пользователь с таким id уже существует
- 422 - ошибка, отсутствуют
обязательные данные
- Обновление данных пользователя во время регистрации - PATCH запрос, /v1/users/initiate/{id}
id - path-параметр, обязательный: ID пользователя
{
"id": "261849634668832274",
"firstName": "",
"lastName": "",
"phone": "",
"email": "belov@pochta.ru",
"gender": "ANONYMOUS",
"registrationTime": null,
"registrationCompleted": false,
"addressDto":
{
"id": "764",
"firstName":
"Геннадий",
"lastName":
"Белов",
"company":
"Крайнет",
"address":
"Центральная",
"city":
null,
"zipCode":
"220112",
"poBox":
"12345",
"country":
"Беларусь"
}
}
{
"id": "261849634668832274",
"firstName": "Геннадий",
"lastName": "Белов",
"phone":
null,
"email": "belov@pochta.ru",
"gender": "ANONYMOUS",
"registrationTime": null,
"registrationCompleted": false,
"addressDto":
{
"id": "764",
"firstName":
"Геннадий",
"lastName":
"Белов",
"company":
"Крайнет",
"address":
"Центральная",
"city":
null,
"zipCode":
"220112",
"poBox":
"12345",
"country":
"Беларусь"
}
}
- 200 - операция выполнена успешно, данные пользователяобновлены
- 404 - ошибка, пользователь с таким ID не найден
- 422- ошибка, отсутствуют обязательные данные
- Завершение регистрации пользователя - POST запрос, /v1/users/{id}/finalize
id - path-параметр, обязательный: ID пользователя
{
"id":
"261849634668832274",
"firstName":
"Геннадий",
"lastName": "Белов",
"phone": null,
"email": "belov@pochta.ru",
"gender":
"ANONYMOUS",
"registrationTime":
"2024-04-08T10:02:51.765",
"registrationCompleted": true,
"addressDto":
{
"id": "764",
"firstName":
"Геннадий",
"lastName":
"Белов",
"company":
"Крайнет",
"address":
"Центральная",
"city":
"Минск",
"zipCode":
"220112",
"poBox":
"12345",
"country":
"Беларусь"
}
}
{
"id":
"261849634668832274",
"firstName":
"Геннадий",
"lastName": "Белов",
"phone": null,
"email": "belov@pochta.ru",
"gender":
"ANONYMOUS",
"registrationTime":
"2024-04-08T10:02:51.765",
"registrationCompleted": true,
"addressDto":
{
"id": "764",
"firstName":
"Геннадий",
"lastName":
"Белов",
"company":
"Крайнет",
"address":
"Центральная",
"city":
"Минск",
"zipCode":
"220112",
"poBox":
"12345",
"country":
"Беларусь"
}
}
- 200 - операция выполнена успешно
- 201 - операция выполнена успешно, создание пользователя завершено
- 422 - ошибка, отсутствуют обязательные данные
- Регистрация пользователя - POST запрос, /v1/users/register
Отсутствуют.
{
"otp": "1111",
"user": {
"externalId": "12345678",
"email": "ivanov@pochta.ru",
"phone": "+7(111)1111111",
"password": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",
"firstName": "Ivan",
"lastName": "Ivanov",
"secondName": "Ivanovich",
"gender": "MALE"
}
}
{
"id": "261849634668832274",
"firstName": "Иван",
"lastName": "Иванов",
"phone": "+7(111)1111111"
,
"email": "ivanov@pochta.ru",
"gender": "ANONYMOUS",
"registrationTime": "2024-04-08T10:02:51.765",
"registrationCompleted": true,
"addressDto": {
"id": "764",
"firstName": "Иван",
"lastName": "Иванов",
"company": "Крайнет",
"address": "Центральная",
"city": "Минск",
"zipCode": "220112",
"poBox": "12345",
"country": "Беларусь"
}
}
- 201 - операция выполнена успешно, пользователь зарегистрирован
- 409 - ошибка, пользователь с таким ID уже существует
- 422 - ошибка, отсутсвуют обязательные данные
- Получение данных пользователя - GET запрос, /v1/users/me
Отсутствуют.
{
"id": "261849634668832274",
"firstName": "Иван",
"lastName": "Иванов",
"phone": "+7(587)65345787",
"email": "ivanov@pochta.ru",
"gender": "ANONYMOUS",
"registrationTime": "2024-04-08T10:02:51.765",
"registrationCompleted": true,
"addressDto": {
"id": "764",
"firstName": "Иван",
"lastName": "Иванов",
"company": "Крайнет",
"address": "Центральная",
"city": "Минск",
"zipCode": "220112",
"poBox": "12345",
"country": "Беларусь"
}
}
- 200 - операция выполнена успешно, получены данные пользователя
- 403 - ошибка, нет доступа к данным (Forbidden)
- 404 - ошибка, пользователь не найден
Работа с событиями
- Получение страницы событий - POST запрос, /v1/events/page
{
"page": 0,
"size": 3,
"sort": [
{
"sortBy": "timestamp",
"direction": "desc"
}
],
"filter": {
"searchTerm": "",
"eventTypes": [],
"statusList": [],
"entityId": "",
"email": "",
"startDate": "",
"endDate": ""
}
}
{
"content": [
{
"userId": "280394080075146770",
"entity": {
"id": "75fbc85f-01b0-4663-bf9c-5f9b763b88b1",
"type": "REGION"
},
"type": "CREATE",
"completionStatus": "SUCCESS",
"timestamp": "2024-08-28T17:39:20.653Z",
"payload": {
"event": "CREATE_REGION"
},
"email": "admin@pochta.ru"
},
{
"userId": "280394080075146770",
"entity": {
"id": "f4a1190f-0d5f-44a6-ac2f-ad3f61dd40ea",
"type": "REGION"
},
"type": "UPDATE",
"completionStatus": "SUCCESS",
"timestamp": "2024-08-28T17:38:06.388Z",
"payload": {
"event": "UPDATE_REGION"
},
"email": "admin@pochta.ru"
},
{
"userId": "202277231504942610",
"entity": {
"id": "1074291DC",
"type": "PRODUCT"
},
"type": "CREATE",
"completionStatus": "SUCCESS",
"timestamp": "2024-08-28T15:41:52.952Z",
"payload": {
"event": "CREATE_PRODUCT"
},
"email": "admin@pochta.ru"
}
],
"number": 0,
"size": 3,
"totalElements": 484,
"pageable": "INSTANCE",
"last": false,
"totalPages": 162,
"sort": {
"unsorted": true,
"sorted": false,
"empty": true
},
"first": true,
"numberOfElements": 3,
"empty": false
}
- 200 - операция выполнена успешно, получена страница с действиями пользователей
- 403 - ошибка, нет доступа
- Получение списка событий - POST запрос, /v1/events/list
{
"eventTypes": [
"CREATE"
]
}
[
{
"userId": "202277231504942610",
"entity": {
"id": "b107eb95-0a50-471b-87a6-492a8d09407d",
"type": "LOCATION"
},
"type": "CREATE",
"completionStatus": "SUCCESS",
"timestamp": "2024-08-19T07:45:24.659Z",
"payload": {
"event": "CREATE_LOCATION"
},
"email": "admin@pochta.ru"
},
{
"userId": "202277231504942610",
"entity": {
"id": "04131019-0ebf-4dc0-a1cf-0e34713297ce",
"type": "LOCATION"
},
"type": "CREATE",
"completionStatus": "SUCCESS",
"timestamp": "2024-08-19T07:45:47.073Z",
"payload": {
"event": "CREATE_LOCATION"
},
"email": "admin@pochta.ru"
}
]
- 200 - операция выполнена успешно, получен список с действиями пользователей
- 403 - ошибка, нет доступа
- Удаление событий по заданному признаку - DELETE запрос, /v1/events
Отсутствуют.
{
"eventTypes":[
"UPDATE"
]
}
- 200 - операция выполнена успешно, события удалены
- 404 - ошибка, события не найдены