Назначение
Поиск сотрудников по отдельным фильтрам: Email, PhoneNumber, FirstName, LastName, MiddleName. Используется для таблиц и фильтрации. Требует разрешение Identity.Employees.View.
Цели
- Фильтрация по каждому полю отдельно (Contains)
- Пагинация и сортировка по CreatedAt (DESC)
- Загрузка ролей для каждого сотрудника
Query: SearchEmployeeListQuery
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|
| Email | string? | Нет | Фильтр по Email (Contains) |
| PhoneNumber | string? | Нет | Фильтр по PhoneNumber (Contains) |
| FirstName | string? | Нет | Фильтр по имени |
| LastName | string? | Нет | Фильтр по фамилии |
| MiddleName | string? | Нет | Фильтр по отчеству |
| Paging | PagingQuery | Да | Пагинация |
Result: SearchEmployeeListQueryResult
| Поле | Тип | Обязательное | Описание |
|---|
| Entries | PagingResult<SearchEmployeeListQueryResultEntry> | Да | Постраничный список сотрудников |
ResultEntry: SearchEmployeeListQueryResultEntry
| Поле | Тип | Обязательное | Описание |
|---|
| UserId | Guid | Да | Идентификатор пользователя |
| CreatedAt | DateTimeOffset | Да | Дата создания |
| Email | string | Да | Email |
| PhoneNumber | string? | Нет | Телефон |
| Name | FullName | Да | ФИО |
| Status | UserStatus | Да | Статус пользователя |
| Roles | IReadOnlyCollection<string> | Да | Названия ролей |
Бизнес-логика
Основной сценарий
- Вызвать
userEntityRepository.Filter с BuildQuery и сортировкой по CreatedAt (DESC).
- BuildQuery: Where по каждому непустому фильтру (Email, PhoneNumber, FirstName, LastName, MiddleName).
- Загрузить UserRoleReferenceEntity и RoleEntity.
- Сформировать Entry для каждого пользователя.
- Вернуть результат.
Альтернативные сценарии
- Все фильтры пустые — полный список в рамках пагинации и тенанта.
Диаграмма алгоритма
Связанные сущности