Микросервис user
Микросервис user предоставляет функциональность для управления клиентами интернет-магазина (получение списка покупателей, их создание , редактирование и регистрация в системе интернет-магазина).
Логика работы
В работе микросервиса участвуют следующие сущности:
- Пользователь (User) - возвращает информацию о пользователе WebShop (id пользователя, имя, фамилия, телефон, электронная почта, пол, дата и время регистрации, адрес)
- Адрес (Address) - возвращает информацию о адресе доставки пользователя (id адреса, имя, фамилия, компания, улица, город, индекс и страна получателя заказа)
- InitiateUserCreationRequest - используется для создания временного пользователя во время регистрации
Аутентификация
При обращении к микросервису через API в запросах необходимо в заголовке Authorization указывать токен: Authorization: Bearer
<токен>
.
Авторизация
Для работы с микросервисом в BackOffice может понадобиться роль Admin и/или Admin_User.
Подробнее о ролях можно узнать здесь.
Service context path
/api/user/
Настройки и параметры конфигурации
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm",
"POSTGRES_DATABASE": "user",
"POSTGRES_MIGRATION_USER": "user_migration",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "user_user"
}
}
// пример взят с тестового стенда
{
"env": {
"OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
"OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
"OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel",
"POSTGRES_HOST": "адрес_хоста",
"POSTGRES_MIGRATION_PASSWORD": "пароль",
"POSTGRES_PASSWORD": "пароль"
}
}
Методы микросервиса
- Получение страницы со списком покупателей (с возможностью пагинации и фильтрации) - 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":
"anna.ivzhichenko+1@digitalchief.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":
"209542979830965778",
"firstName":
"Петр",
"lastName":
"Фоменко",
"phone": "1",
"email": "al23@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime":
"2023-04-13T13:43:37.162",
"registrationCompleted": true,
"addressDto": {
"id":
"144",
"firstName":
"Петр",
"lastName":
"Фоменко",
"company":
"1",
"address":
"1",
"city": "1",
"zipCode": "1",
"poBox": "1",
"country": "1"
}
},
{
"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":
"РФ"
}
}
],
"pageable":
{
"sort": {
"unsorted": false,
"sorted": true,
"empty":
false
},
"pageNumber": 3,
"pageSize": 10,
"offset": 30,
"paged": true,
"unpaged": false
},
"totalPages": 11,
"totalElements": 103,
"last":
false,
"first": false,
"numberOfElements": 10,
"sort": {
"unsorted": false,
"sorted":
true,
"empty": false
},
"number": 3,
"size": 10,
"empty": false
}
200 - операция выполнена успешно, получен список покупателей
- Отображение покупателя по его ID - GET запрос, /v1/users/{id}
id - path-параметр, обязательный: ID покупателя
{
"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"
}
}
- 200 - операция выполнена успешно, получены данные о покупателе
- 404 - ошибка, покупатель с
таким ID не найден
- Создание покупателя - POST запрос, /v1/users
{
"id":"208084200379672195",
"firstName":"Иван",
"lastName":"Иванов",
"phone":"123",
"email":"al3@digitalchief.ru",
"gender":"ANONYMOUS",
"registrationTime":"2023-04-03T12:15:23.02",
"registrationCompleted":true,
"addressDto":{
"id":"97",
"firstName":"Иван",
"lastName":"Иванов",
"company":"CompanyCO",
"address":"Длинная",
"city":"Москва",
"zipCode":"12",
"poBox":"1235",
"country":"Россия"
}
}
{
"id": "208084200379672195",
"firstName": "Иван",
"lastName":
"Иванов",
"phone": "123",
"email":
"al3@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime": "2024-05-17T10:02:32.591",
"registrationCompleted": true,
"addressDto": {
"id": "97",
"firstName": "Иван",
"lastName": "Иванов",
"company":
"CompanyCO",
"address": "Длинная",
"city": "Москва",
"zipCode": "12",
"poBox": "1235",
"country": "Россия"
}
}
- 201 - операция выполнена успешно, покупатель создан
- 409 - ошибка, покупатель с таким id уже существует
- 422 - ошибка, отсутствует обязательная информация
- Редактирование покупателя - PATCH запрос, /v1/users/{id}
id - path-параметр, обязательный: ID покупателя
{
"id": "208084200379672195",
"lastName": "Серов",
"addressDto":
{
"id": "97",
"firstName": "Иван",
"lastName":
"Иванов",
"company": "CompanyCO",
"address": "Длинная",
"city": "Москва",
"zipCode":
"12",
"poBox": "1235",
"country": "Россия"
}
}
{
"id":
"208084200379672195",
"firstName": "Иван",
"lastName": "Серов",
"phone":
"123",
"email": "al3@digitalchief.ru",
"gender": "ANONYMOUS",
"registrationTime": "2024-05-17T10:02:32.591",
"registrationCompleted": true,
"addressDto": {
"id": "97",
"firstName": "Иван",
"lastName":
"Иванов",
"company": "CompanyCO",
"address": "Длинная",
"city": "Москва",
"zipCode":
"12",
"poBox": "1235",
"country": "Россия"
}
}
- 200 - операция выполнена успешно, данные о клиенте обновлены
- 404 - ошибка, клиент с таким ID не найден
- 422 - ошибка, отсутствуют обязательные данные
- Удаление покупателя по его ID - DELETE запрос, /v1/users/{id}
id - path-параметр, обязательный: ID покупателя
Отсутствует. В ответе приходит только код операции, например, 204.
- 204 - операция выполнена успешно, покупатель удален
- 404 - ошибка, покупатель с таким ID не найден
- Запуск регистрации покупателя - POST запрос, /v1/users/initiate
{
"externalId": "261974313576457746",
"email": "pirogov@pochta.ru"
}
{
"id": "261974313576457746",
"firstName": null,
"lastName": null,
"phone": null,
"email": "progov@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":
"Беларусь"
}
}
- 200 - операция выполнена успешно
- 201 - операция выполнена успешно, покупатель создан
- 422 - ошибка, отсутствуют
обязательные данные