Фильтрация задач по custom-полям
В запрос GET /listAfterId для фильтрации по настраиваемым полям добавляется новый параметр customFields. Значение содержит JSON-массив с объектами, каждый из которых содержит имя поля, тип операции и значение. Пример:
http://...?customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"12345"},{"name":"Telefon__int__88432000555__","op":"NOT NULL"}]
Список возможных операций:
- EQ («равно»)
- NE («не равно»)
- GT («больше»)
- LT («меньше»)
- GE («больше или равно»)
- LE («меньше или равно»)
- CONTAINS («содержит»)
- BEGINS («начинается с»)
- ENDS («заканчивается на»)
- NULL (не требует value)
- NOT NULL (не требует value)
- EMPTY (не требует value)
- NOT EMPTY (не требует value)
Заметки по реализации
Про синтаксис вытаскивания значений из JSON в Postgres можно почитать здесь: http://www.postgresql.org/docs/9.3/static/functions-json.html
Пример запроса на базе trust:
select * from issues.issues where issues.custom_fields->'Dop_pole_dlya_testov'->>'value' = '12345'
В коде Cerebellum должна использоваться примерно следующая конструкция:
.from("customFields").as(value -> {
JsonNode values = gs.Json.parse((String) value);
ConditionSet set = new ConditionSet();
// перебираем все значения в values,
// создаем новый Condition на основе переданных
// операции, колонки и значения, и
// добавляем в set
// ...
// объединяем все условия на настраиваемые поля
// логическим И.
return set.and();
})