getApiFilters static method
Implementation
static String? getApiFilters(
List<Column> columns, List<QueryFilter>? filters) {
if (filters == null) {
return null;
}
final whereParams = filters.map((filter) {
final Column attributeColumn = columns
.lastWhere((column) => column.attributeName == filter.attribute);
switch (filter.condition) {
case QueryCondition.In:
final List<String> values =
filter.value is List ? filter.value : [filter.value];
return 'filter=${filter.attribute}${attributeColumn.relation?.referencedColumn != null ? '.${attributeColumn.relation?.referencedColumn}' : ''}:in:[${values.join(',')}]';
case QueryCondition.Equal:
return 'filter=${filter.attribute}:eq:${filter.value}';
case QueryCondition.Like:
final List<String> values =
filter.value is List ? filter.value : [filter.value];
final ilikeFilters = values
.map((valueItem) => 'filter=${filter.attribute}:like:$valueItem')
.toList();
return ilikeFilters.join('&');
case QueryCondition.Ilike:
final List<String> values =
filter.value is List ? filter.value : [filter.value];
final ilikeFilters = values
.map((valueItem) => 'filter=${filter.attribute}:ilike:$valueItem')
.toList();
return ilikeFilters.join('&');
case QueryCondition.LessThan:
return 'filter=${filter.attribute}:lt:${filter.value}';
case QueryCondition.LessThanOrEqualTo:
return 'filter=${filter.attribute}:lte:${filter.value}';
case QueryCondition.GreaterThan:
return 'filter=${filter.attribute}:gt:${filter.value}';
case QueryCondition.GreaterThanOrEqualTo:
return 'filter=${filter.attribute}:gte:${filter.value}';
default:
return null;
}
}).where((filter) => filter != null);
return whereParams.length > 0 ? whereParams.join(' AND ') : null;
}