Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Условия

...

фильтрации

...

передаются

...

списком

...

FilterContainer:

...

{

...

NextFilterLogicOperationType,

...

FilterType,

...

Value

...

}

...

.

...

FilterType определяет

...

вид

...

фильтра

...

(таблица

...

ниже),

...

Value

...

его

...

параметры

...

в

...

формате,

...

специфичном

...

для

...

конкретного

...

FilterType.

...

Глобальные

...

фильтры

...

FilterType

...

Назначение
RouteFilterФильтр по дорогам. Для сущностей, связанных с дорогами (интерфейс IRoutIdEntity), фильтрует по полю routeId. Для самой сущности дороги (Route) ищет указанные Id в полях Id и JunctionId (через ИЛИ).
RegionFilterФильтр по регионам. Для сущности региона (Region) ищет указанные Id в поле Id. Для прочих геометрических сущностей берёт геометрию указанных регионов и фильтрует по пересечению (Intersect).
PolygonFilterГеометрический фильтр по полигонам. Работает только для геометрических сущностей — ищет вхождение в полигон (Intersect).
GeometryAttributeFilterФильтр по типам геометрии (Point/Polygon/Linestring). Работает только для геометрических сущностей. Указанный тип считается эквивалентным своему Multi-варианту (например, Point включает и MultiPoint).
DataSourceGeometryFilterФильтр по геометрии сущностей другого источника данных. Значение — список объектов { DataSourceId, Filter (вложенный список `FilterContainer` для сущности этого источника), GeometryOperationType, Buffer, FilterBuffer }. GeometryOperationType задаёт геометрическое отношение (Intersects/Contains/Disjoint/Equals/Touches/Covers/Within) между текущей сущностью (с буфером Buffer) и геометриями отфильтрованных сущностей источника (с буфером FilterBuffer). Работает только для геометрических сущностей; источник не может фильтровать сам себя.
PropertyFilterФильтрация по значениям полей сущности. При фильтрации по полям-словарям указывается имя поля-идентификатора (например, BusStopTypeId), а не значение классификатора.
ProjectFilterФильтр по проектам. Для сущностей, связанных с проектами (интерфейс IProjectEntity), фильтрует по полю ProjectId.

Логические операции

Между фильтрами (NextFilterLogicOperationType) и между условиями внутри PropertyFilter (NextLogicOperationType) допустимы: And, Or. Эти поля можно передавать как null (или опускать), если фильтр единственный либо последний в цепочке.

Типы операций PropertyFilter (OperationType)

OperationTypeОписаниеОграничения
EqРавно (сравнение 1:1).Все типы полей; допускает явный null.
NeqНе равно.Как Eq, с отрицанием.
Lt / LeМеньше / меньше или равно.Недопустимо для String и Guid; null не допускается и строки со значением null из БД не учитываются.
Gt / GeБольше / больше или равно.Недопустимо для String и Guid; null не допускается.
In / NInВхождение в массив значений (аналог Eq/Neq по массиву).In — неявное ИЛИ между значениями, NIn — неявное И.
Like / NLikeПодстрока (аналог contains), регистронезависимо.Только String; null не допускается.
StartWith / NStartWithНачинается с подстроки.Только String; null не допускается.
EndWith / NEndWithЗаканчивается подстрокой.Только String; null не допускается.

Пример фильтра

[
 |
| --- | --- |
| `RouteFilter` | Фильтр по дорогам. Для сущностей, связанных с дорогами (интерфейс `IRoutIdEntity`), фильтрует по полю `routeId`. Для самой сущности дороги (`Route`) ищет указанные Id в полях `Id` и `JunctionId` (через ИЛИ). |
| `RegionFilter` | Фильтр по регионам. Для сущности региона (`Region`) ищет указанные Id в поле `Id`. Для прочих геометрических сущностей берёт геометрию указанных регионов и фильтрует по пересечению (`Intersect`). |
| `PolygonFilter` | Геометрический фильтр по полигонам. Работает только для геометрических сущностей — ищет вхождение в полигон (`Intersect`). |
| `GeometryAttributeFilter` | Фильтр по типам геометрии (`Point`/`Polygon`/`Linestring`). Работает только для геометрических сущностей. Указанный тип считается эквивалентным своему `Multi`-варианту (например, `Point` включает и `MultiPoint`). |
| `DataSourceGeometryFilter` | Фильтр по геометрии сущностей другого источника данных. Значение — список объектов ``{ DataSourceId, Filter (вложенный список `FilterContainer` для сущности этого источника), GeometryOperationType, Buffer, FilterBuffer }``. `GeometryOperationType` задаёт геометрическое отношение (`Intersects`/`Contains`/`Disjoint`/`Equals`/`Touches`/`Covers`/`Within`) между текущей сущностью (с буфером `Buffer`) и геометриями отфильтрованных сущностей источника (с буфером `FilterBuffer`). Работает только для геометрических сущностей; источник не может фильтровать сам себя. |
| `PropertyFilter` | Фильтрация по значениям полей сущности. При фильтрации по полям-словарям указывается имя поля-идентификатора (например, `BusStopTypeId`), а не значение классификатора. |
| `ProjectFilter` | Фильтр по проектам. Для сущностей, связанных с проектами (интерфейс `IProjectEntity`), фильтрует по полю `ProjectId`. |
## Логические операции
Между фильтрами (`NextFilterLogicOperationType`) и между условиями внутри `PropertyFilter` (`NextLogicOperationType`) допустимы: `And`, `Or`.
Эти поля можно передавать как `null` (или опускать), если фильтр единственный либо последний в цепочке.
## Типы операций PropertyFilter (OperationType)
| OperationType | Описание | Ограничения |
| --- | --- | --- |
| `Eq` | Равно (сравнение 1:1). | Все типы полей; допускает явный `null`. |
| `Neq` | Не равно. | Как `Eq`, с отрицанием. |
| `Lt` / `Le` | Меньше / меньше или равно. | Недопустимо для `String` и `Guid`; `null` не допускается и строки со значением `null` из БД не учитываются. |
| `Gt` / `Ge` | Больше / больше или равно. | Недопустимо для `String` и `Guid`; `null` не допускается. |
| `In` / `NIn` | Вхождение в массив значений (аналог `Eq`/`Neq` по массиву). | `In` — неявное ИЛИ между значениями, `NIn` — неявное И. |
| `Like` / `NLike` | Подстрока (аналог `contains`), регистронезависимо. | Только `String`; `null` не допускается. |
| `StartWith` / `NStartWith` | Начинается с подстроки. | Только `String`; `null` не допускается. |
| `EndWith` / `NEndWith` | Заканчивается подстрокой. | Только `String`; `null` не допускается. |
## Пример фильтра
```json
[
{ "NextFilterLogicOperationType": "And", "FilterType": "RouteFilter", "Value": ["3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7"] },
{ "NextFilterLogicOperationType": "And", "FilterType": "ProjectFilter", "Value": ["3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7"] },
{ "NextFilterLogicOperationType": "And", "FilterType": "RegionFilter", "Value": ["3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7"] },
{ "NextFilterLogicOperationType": "And", "FilterType": "PolygonFilter", "Value": { "Srid": 4326, "Geometries": [ { "type": "Polygon", "coordinates": [[[55.893821,49.333641],[55.891733,49.328927],[55.899957,49.316499],[55.90215,49.322116],[55.893821,49.333641]]] } ] } },
{ "NextFilterLogicOperationType": "And", "FilterType": "GeometryAttributeFilter", "Value": { "type": ["Point", "Polygon"] } },
{ "NextFilterLogicOperationType": "Or", "FilterType": "DataSourceGeometryFilter", "Value": [ { "DataSourceId": "3d8b5e7c-7637-4c52-a51b-7e1cf10d04e7", "GeometryOperationType": "Intersects", "Buffer": 0, "FilterBuffer": 0, "Filter": [] } ] },
{ "NextFilterLogicOperationType": "And", "FilterType": "PropertyFilter", "Value": [
{ "NextLogicOperationType": "Or", "PropertyName": "Name", "OperationType": "Eq", "Value": "Andrey" },
{ "NextLogicOperationType": "And", "PropertyName": "Name", "OperationType": "Like", "Value": "I" },
{ "NextLogicOperationType": "And", "PropertyName": "Name", "OperationType": "StartWith", "Value": "I" },
{ "NextLogicOperationType": "And", "PropertyName": "Name", "OperationType": "EndWith", "Value": "y" },
{ "NextLogicOperationType": "And", "PropertyName": "Number", "OperationType": "Gt", "Value": "10" },
{ "NextLogicOperationType": "Or", "PropertyName": "Number", "OperationType": "Lt", "Value": "100" },
{ "NextLogicOperationType": "None","PropertyName": "NumberUrns", "OperationType": "In", "Value": ["5","8","10"] }
] }
] ```
>

Пример

...

показывает

...

все

...

семь

...

FilterType и

...

все

...

семь

...

условий

...

PropertyFilter в

...

виде

...

валидного

...

JSON

...

без

...

//

...

-комментариев

...

и

...

висячих

...

запятых.

...

Правила

...

и

...

ограничения

Обработка

...

ошибок

...

фильтрации

...

строгая

...

...

нарушение

...

контракта

...

приводит

...

к

...

ошибке

...

запроса:

...

  • Вызов

...

  • без

...

  • filterId предфильтрации

...

  • и

...

  • без

...

  • самой

...

  • фильтрации

...

  • возвращает

...

  • все

...

  • данные

...

  • (актуально

...

  • только

...

  • внутри

...

  • бэкенда).

...

  • Некорректный

...

  • JSON

...

  • в

...

  • значении

...

  • контейнера

...

  • фильтра

...

  • вызывает

...

  • ошибку.

...

  • Отсутствующий

...

  • FilterType (

...

  • null)

...

  • вызывает

...

  • ошибку.

...

  • NextFilterLogicOperationType со

...

  • значением

...

  • null в

...

  • середине

...

  • логической

...

  • цепочки

...

  • вызывает

...

  • ошибку.

...

  • Некорректный

...

  • JSON

...

  • в

...

  • Value вызывает

...

  • ошибку.

...

  • Все

...

  • значения

...

  • (числа,

...

  • даты)

...

  • передаются

...

  • строками

...

...

  • для

...

  • единообразия.