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

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

Микросервис user предоставляет функциональность для управления клиентами интернет-магазина (получение списка покупателей, их создание , редактирование и регистрация в системе интернет-магазина).

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

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

  • Пользователь (User) - возвращает информацию о пользователе WebShop (id пользователя, имя, фамилия, телефон, электронная почта, пол, дата и время регистрации, адрес)
  • Адрес (Address) - возвращает информацию о адресе доставки пользователя (id адреса, имя, фамилия, компания, улица, город, индекс и страна получателя заказа)
  • InitiateUserCreationRequest - используется для создания временного пользователя во время регистрации

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

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

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

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

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

Service context path

/api/user/

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

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

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

По умолчанию

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

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

  • Получение страницы со списком покупателей (с возможностью пагинации и фильтрации) - GET запрос, /v1/users
Request parameters

searchTerm - query-параметр: поисковый запрос
id - query-параметр: ID покупателя
firstName - query-параметр: имя покупателя
lastName - query-параметр: фамилия покупателя
email - query-параметр: электронная почта покупателя
registrationTime - query-параметр: дата регистрации покупателя
phone - query-параметр: телефон покупателя
page - query-параметр: номер страницы
size - query-параметр: количество отображаемых на странице элементов
sort - query-параметр: сортировка элементов на странице

Copy-icon
Response sample

{
  "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
}

Copy-icon
Response codes

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

  • Получение отфильтрованного/отсортированного списка покупателей интернет-магазина - POST запрос, /v1/users/list
Request body sample

{
    "page": 3,
    "size": 10,
    "sort": [
        {
            "sortBy": "id",
            "direction": "asc"
        }
    ],
    "filter": {}
}

Copy-icon
Response sample

{
  "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
}

Copy-icon
Response codes

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

  • Отображение покупателя по его ID - GET запрос, /v1/users/{id}
Request parameters

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

Copy-icon
Response sample

{
  "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"
  }
}

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

{
   "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":"Россия"
   }
}

Copy-icon
Response sample

{
  "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": "Россия"
  }
}

Copy-icon
Response codes
  • 201 - операция выполнена успешно, покупатель создан
  • 409 - ошибка, покупатель с таким id уже существует
  • 422 - ошибка, отсутствует обязательная информация
  • Редактирование покупателя - PATCH запрос, /v1/users/{id}
Request parameters

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

Copy-icon
Request body sample

{
  "id": "208084200379672195",
  "lastName": "Серов",
  "addressDto": {
    "id": "97",
    "firstName": "Иван",
    "lastName": "Иванов",
    "company": "CompanyCO",
    "address": "Длинная",
    "city": "Москва",
    "zipCode": "12",
    "poBox": "1235",
    "country": "Россия"
  }
}

Copy-icon
Response sample

{
  "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": "Россия"
  }
}

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

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

Copy-icon
Response sample

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

Response codes
  • 204 - операция выполнена успешно, покупатель удален
  • 404 - ошибка, покупатель с таким ID не найден
  • Запуск регистрации покупателя - POST запрос, /v1/users/initiate
Request body sample

{
  "externalId": "261974313576457746",
  "email": "pirogov@pochta.ru"
}

Copy-icon
Response sample

{
    "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
    }
}

Copy-icon
Response codes
  • 201 - операция выполнена успешно, запущен процесс регистрации пользователя
  • 409 - ошибка, пользователь с таким ID уже существует
  • 422 - ошибка, отсутствуют обязательные данные
  • Обновление данных покупателя во время регистрации - PATCH запрос, /v1/users/initiate/{id}
Request parameters

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

Copy-icon
Request body sample

{
    "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": "Беларусь"
    }
}

Copy-icon
Response sample

{
    "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": "Беларусь"
    }
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, данные покупателя обновлены
  • 404 - ошибка, покупатель с таким ID не найден
  • 422- ошибка, отсутствуют обязательные данные
  • Завершение регистрации пользователя - POST запрос, /v1/users/{id}/finalize
Request parameters

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

Copy-icon
Response sample

{
    "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": "Беларусь"
    }
}

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