SearchTenantUsersListQuery
Назначение
Поиск пользователей тенанта с фильтрацией и пагинацией. Используется Admin API для отображения списка пользователей организации. Включает роли пользователя (UserRoleReferenceEntity, RoleEntity).
Цели
- Фильтрация по Email, PhoneNumber, Status, Name (FirstName, LastName, MiddleName)
- Пагинация и сортировка по CreatedAt (DESC)
- Подгрузка ролей пользователя (RoleId, RoleName) через UserRoleReferenceEntity и RoleEntity
Query: SearchTenantUsersListQuery
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|
| TenantId | Guid | Да | Идентификатор тенанта |
| Email | string? | Нет | Фильтр по Email (Contains) |
| PhoneNumber | string? | Нет | Фильтр по номеру телефона (Contains) |
| Status | UserStatus? | Нет | Фильтр по статусу пользователя |
| Name | string? | Нет | Поиск по FirstName, LastName, MiddleName (Contains) |
| Paging | PagingQuery | Да | Постраничная навигация |
Result: SearchTenantUsersListQueryResult
| Поле | Тип | Обязательное | Описание |
|---|
| Entries | PagingResult<SearchTenantUsersListQueryResultEntry> | Да | Список пользователей с пагинацией |
ResultEntry: SearchTenantUsersListQueryResultEntry
| Поле | Тип | Обязательное | Описание |
|---|
| UserId | Guid | Да | Идентификатор пользователя |
| Email | string | Да | Email |
| PhoneNumber | string? | Нет | Номер телефона |
| Name | FullName | Да | ФИО |
| Status | UserStatus | Да | Статус пользователя |
| Roles | IReadOnlyCollection<SearchTenantUsersListRoleEntry> | Да | Роли пользователя |
SearchTenantUsersListRoleEntry
| Поле | Тип | Обязательное | Описание |
|---|
| RoleId | long | Да | Идентификатор роли |
| RoleName | string | Да | Название роли |
Бизнес-логика
Основной сценарий
- Вызвать
userEntityRepository.Filter с BuildQuery и сортировкой по CreatedAt (DESC).
- BuildQuery: фильтр по TenantId; при Email — Contains; при PhoneNumber — Contains; при Status — равенство; при Name — OR Contains по FirstName, LastName, MiddleName.
- Получить UserIds из результата. Вызвать
userRoleReferenceEntityRepository.GetByTenantIdAndUserIds.
- Получить RoleIds, загрузить RoleEntity через
roleEntityRepository.GetByTenantIdAndIds.
- Сформировать SearchTenantUsersListQueryResultEntry для каждого UserEntity с ролями.
- Вернуть результат.
Альтернативные сценарии
- Ошибок не предусмотрено: пустой результат при отсутствии совпадений.
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