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

SearchTenantsListQuery

Назначение

Поиск тенантов с фильтрацией и пагинацией. Используется Admin API для отображения списка тенантов.

Цели

  • Фильтрация по типу, email, телефону, ИНН, ОГРН, КПП, названию
  • Поиск по общему термину (OR Contains по полям)
  • Подсчёт пользователей по каждому тенанту
  • Пагинация результата

Query: SearchTenantsListQuery

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

ПолеТипОбязательноеОписание
TypeTenantType?НетФильтр по типу тенанта
ContactEmailstring?НетEmail для связи (Contains)
ContactPhoneNumberstring?НетТелефон (Contains)
Innstring?НетИНН из LegalEntity (Contains)
Ogrnstring?НетОГРН (Contains)
Kppstring?НетКПП (Contains)
Namestring?НетНазвание юр. лица (Contains)
Termstring?НетOR Contains по ContactEmail, ContactPhoneNumber, Inn, Ogrn, Kpp, Name
PagingPagingQueryДаПагинация

Result: SearchTenantsListQueryResult

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

ResultEntry: SearchTenantsListQueryResultEntry

| Поле | Тип | Обязательное | Описание | |------|-----|----------| | TenantId | Guid | Да | ID тенанта | | CreatedAt | DateTimeOffset | Да | Дата создания | | Type | TenantType | Да | Тип | | LegalEntity | LegalEntityValueObject | Да | Юр. реквизиты | | ContactEmail | string | Да | Email | | ContactPhoneNumber | string | Да | Телефон | | NumberOfUsers | int | Да | Количество пользователей |

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

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

  1. Вызвать tenantEntityRepository.Filter с BuildQuery и сортировкой по CreatedAt (DESC).
  2. Получить количество пользователей по TenantIds через userEntityRepository.GetUserCountByTenantIds (таблица UserEntity).
  3. Сформировать Entries с NumberOfUsers.
  4. Вернуть результат.

BuildQuery

  • При Type — фильтр q.Type == request.Type
  • При ContactEmailq.ContactEmail.Contains(request.ContactEmail)
  • При ContactPhoneNumberq.ContactPhoneNumber.Contains(...)
  • При Inn, Ogrn, Kpp, Name — Contains по полям LegalEntity
  • При Term — OR Contains по ContactEmail, ContactPhoneNumber, Inn, Ogrn, Kpp, Name (ToLower)

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

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

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

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