SearchTenantsListQuery
Назначение
Поиск тенантов с фильтрацией и пагинацией. Используется Admin API для отображения списка тенантов.
Цели
- Фильтрация по типу, email, телефону, ИНН, ОГРН, КПП, названию
- Поиск по общему термину (OR Contains по полям)
- Подсчёт пользователей по каждому тенанту
- Пагинация результата
Query: SearchTenantsListQuery
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| Type | TenantType? | Нет | Фильтр по типу тенанта |
| ContactEmail | string? | Нет | Email для связи (Contains) |
| ContactPhoneNumber | string? | Нет | Телефон (Contains) |
| Inn | string? | Нет | ИНН из LegalEntity (Contains) |
| Ogrn | string? | Нет | ОГРН (Contains) |
| Kpp | string? | Нет | КПП (Contains) |
| Name | string? | Нет | Название юр. лица (Contains) |
| Term | string? | Нет | OR Contains по ContactEmail, ContactPhoneNumber, Inn, Ogrn, Kpp, Name |
| Paging | PagingQuery | Да | Пагинация |
Result: SearchTenantsListQueryResult
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| Entries | PagingResult<SearchTenantsListQueryResultEntry> | Да | Список записей с пагинацией |
ResultEntry: SearchTenantsListQueryResultEntry
| Поле | Тип | Обязательное | Описание | |------|-----|----------| | TenantId | Guid | Да | ID тенанта | | CreatedAt | DateTimeOffset | Да | Дата создания | | Type | TenantType | Да | Тип | | LegalEntity | LegalEntityValueObject | Да | Юр. реквизиты | | ContactEmail | string | Да | Email | | ContactPhoneNumber | string | Да | Телефон | | NumberOfUsers | int | Да | Количество пользователей |
Бизнес-логика
Основной сценарий
- Вызвать
tenantEntityRepository.FilterсBuildQueryи сортировкой по CreatedAt (DESC). - Получить количество пользователей по TenantIds через
userEntityRepository.GetUserCountByTenantIds(таблица UserEntity). - Сформировать Entries с NumberOfUsers.
- Вернуть результат.
BuildQuery
- При
Type— фильтрq.Type == request.Type - При
ContactEmail—q.ContactEmail.Contains(request.ContactEmail) - При
ContactPhoneNumber—q.ContactPhoneNumber.Contains(...) - При
Inn,Ogrn,Kpp,Name— Contains по полям LegalEntity - При
Term— OR Contains по ContactEmail, ContactPhoneNumber, Inn, Ogrn, Kpp, Name (ToLower)
Альтернативные сценарии
- Ошибок не предусмотрено: пустой результат возвращается при отсутствии совпадений.
Диаграмма алгоритма
Связанные сущности
- TenantEntity
- UserEntity — для подсчёта NumberOfUsers