Заголовки
Каждое правило в flexy содержит блок headers, определяющий критерии сопоставления. Заголовок представляет собой объект “ключ — значение”, где каждый ключ соответствует полю входящего объекта запроса, а значение является фильтрующим выражением. Чтобы правило сработало, все пары “ключ — значение” в блоке headers должны быть правивыми.
Прямые значения
Заголовок раздела «Прямые значения»| Тип значения | Оператор MongoDB | Описание |
|---|---|---|
| string | $eq |
Точное совпадение |
| number | $eq |
Точное совпадение |
| array | $in |
Значение поля должно быть одним из элементов |
| null | - | false, правило не отработает |
| boolean | - | false, правило не отработает |
Операторы { operator: value }
Заголовок раздела «Операторы { operator: value }»| Оператор | Тип значения | Описание |
|---|---|---|
| eq | любой | == |
| ne | любой | != |
| gt | number / string | > |
| gte | number / string | >= |
| lt | number / string | < |
| lte | number / string | <= |
| in | только array | Проверка значения в массиве. Не массив вызовет ошибку |
| nin | только array | Проверка значения не в массиве. Не массив вызовет ошибку |
| regex | только string (валидный паттерн) | Невалидный regex / числа вызывают ошибку |
| range | Массив из 2 элементов [lo, hi] |
Range, включительно с двух сторон. Не массивы вызывают ошибку. То же самое что key: { gte: lo, lte: hi } |
| unknown keys | любой | Все неизвестные ключи игнорируются |
{ // mid должен быть одним из: 100, 1, 3, 99 // массив — сокращённая запись для $in "mid": [100, 1, 3, 99],
// currency должна быть RUB, USD или EUR // обе формы равнозначны "currency": { "in": ["RUB", "USD", "EUR"] }, "currency": ["RUB", "USD", "EUR"],
// поле phone должно быть null "phone": { "eq": null },
// amount от 10000 до 20000 включительно // обе формы равнозначны "amount": { "range": [10000, 20000] }, "amount": { "gte": 10000, "lte": 20000 },
// email должен заканчиваться на @gmail.com "email": { "regex": "@gmail.com$" },
// email не должен быть в списке заблокированных "email": { "nin": ["ban1@test.com", "ban2@test.com"] },}Приоритет правил
Заголовок раздела «Приоритет правил»Если фильтрация находит несколько подходящих правил, они сортируются по перечисленным ниже критериям по порядку. Каждый следующий критерий используется только для разрешения “ничьих”, оставшихся после предыдущего:
Priority(по убыванию) — приоритет назначенный правилу.- Количество ключей в заголовке (по убыванию) — правила, у которых в заголовке больше ключей, считаются более специфичными и выигрывают.
- Наличие определённых ключей (по убыванию) — у каждого сервиса есть свой список ключей (см. ниже). Правило, в котором ключ задан, выигрывает правила без него. Ключи проверяются по порядку.
CreatedAt(по убыванию) — при равенстве всех предыдущих критериев применяется самое свежее правило.
Конкретные ключи, проверяемые на шаге 3, и порядок их проверки зависят от сервиса:
| Сервис | Проверяемые ключи (по порядку) |
|---|---|
| Commission | to_profile, trader_id, agent_id, amount |
| Guard | mid, acq_alias, amount |
