Перейти к основному содержимому

SearchTenantUsersListQuery

Назначение

Поиск пользователей тенанта с фильтрацией и пагинацией. Используется Admin API для отображения списка пользователей организации. Включает роли пользователя (UserRoleReferenceEntity, RoleEntity).

Цели

  • Фильтрация по Email, PhoneNumber, Status, Name (FirstName, LastName, MiddleName)
  • Пагинация и сортировка по CreatedAt (DESC)
  • Подгрузка ролей пользователя (RoleId, RoleName) через UserRoleReferenceEntity и RoleEntity

Query: SearchTenantUsersListQuery

Входные данные

ПолеТипОбязательноеОписание
TenantIdGuidДаИдентификатор тенанта
Emailstring?НетФильтр по Email (Contains)
PhoneNumberstring?НетФильтр по номеру телефона (Contains)
StatusUserStatus?НетФильтр по статусу пользователя
Namestring?НетПоиск по FirstName, LastName, MiddleName (Contains)
PagingPagingQueryДаПостраничная навигация

Result: SearchTenantUsersListQueryResult

ПолеТипОбязательноеОписание
EntriesPagingResult<SearchTenantUsersListQueryResultEntry>ДаСписок пользователей с пагинацией

ResultEntry: SearchTenantUsersListQueryResultEntry

ПолеТипОбязательноеОписание
UserIdGuidДаИдентификатор пользователя
EmailstringДаEmail
PhoneNumberstring?НетНомер телефона
NameFullNameДаФИО
StatusUserStatusДаСтатус пользователя
RolesIReadOnlyCollection<SearchTenantUsersListRoleEntry>ДаРоли пользователя

SearchTenantUsersListRoleEntry

ПолеТипОбязательноеОписание
RoleIdlongДаИдентификатор роли
RoleNamestringДаНазвание роли

Бизнес-логика

Основной сценарий

  1. Вызвать userEntityRepository.Filter с BuildQuery и сортировкой по CreatedAt (DESC).
  2. BuildQuery: фильтр по TenantId; при Email — Contains; при PhoneNumber — Contains; при Status — равенство; при Name — OR Contains по FirstName, LastName, MiddleName.
  3. Получить UserIds из результата. Вызвать userRoleReferenceEntityRepository.GetByTenantIdAndUserIds.
  4. Получить RoleIds, загрузить RoleEntity через roleEntityRepository.GetByTenantIdAndIds.
  5. Сформировать SearchTenantUsersListQueryResultEntry для каждого UserEntity с ролями.
  6. Вернуть результат.

Альтернативные сценарии

  • Ошибок не предусмотрено: пустой результат при отсутствии совпадений.

BuildQuery

  • TenantId — u.TenantId == request.TenantId
  • Email — q.Email.Contains(request.Email)
  • PhoneNumber — q.PhoneNumber != null && q.PhoneNumber.Contains(request.PhoneNumber)
  • Status — q.Status == request.Status.Value
  • Name — OR Contains по FirstName, LastName, MiddleName

Диаграмма алгоритма

Связанные сущности

API

Admin API: SearchTenantUsersList