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

Заголовки

Каждое правило в flexy содержит блок headers, определяющий критерии сопоставления. Заголовок представляет собой объект “ключ — значение”, где каждый ключ соответствует полю входящего объекта запроса, а значение является фильтрующим выражением. Чтобы правило сработало, все пары “ключ — значение” в блоке headers должны быть правивыми.

Тип значения Оператор MongoDB Описание
string $eq Точное совпадение
number $eq Точное совпадение
array $in Значение поля должно быть одним из элементов
null - false, правило не отработает
boolean - false, правило не отработает
Оператор Тип значения Описание
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"] },
}

Если фильтрация находит несколько подходящих правил, они сортируются по перечисленным ниже критериям по порядку. Каждый следующий критерий используется только для разрешения “ничьих”, оставшихся после предыдущего:

  1. Priority (по убыванию) — приоритет назначенный правилу.
  2. Количество ключей в заголовке (по убыванию) — правила, у которых в заголовке больше ключей, считаются более специфичными и выигрывают.
  3. Наличие определённых ключей (по убыванию) — у каждого сервиса есть свой список ключей (см. ниже). Правило, в котором ключ задан, выигрывает правила без него. Ключи проверяются по порядку.
  4. CreatedAt (по убыванию) — при равенстве всех предыдущих критериев применяется самое свежее правило.

Конкретные ключи, проверяемые на шаге 3, и порядок их проверки зависят от сервиса:

Сервис Проверяемые ключи (по порядку)
Commission to_profile, trader_id, agent_id, amount
Guard mid, acq_alias, amount