composeFilter method

dynamic composeFilter(
  1. FilterParams? filter
)

Implementation

dynamic composeFilter(FilterParams? filter) {
  filter = filter ?? FilterParams();

  var criteria = [];

  var search = filter.getAsNullableString('search');
  if (search != null) {
    var searchRegex = RegExp(r'^' + search, caseSensitive: false);
    var searchCriteria = [];
    searchCriteria.add({
      'login': {r'$regex': searchRegex.pattern}
    });
    searchCriteria.add({
      'name': {r'$regex': searchRegex.pattern}
    });
    criteria.add({r'$or': searchCriteria});
  }

  var id = filter.getAsNullableString('id');
  if (id != null) {
    criteria.add({'_id': id});
  }

  var ids = filter.getAsObject('ids');
  if (ids is String) {
    ids = ids.split(',');
  }
  if (ids is List) {
    criteria.add({
      '_id': {r'$in': ids}
    });
  }

  var name = filter.getAsNullableString('name');
  if (name != null) {
    criteria.add({'name': name});
  }

  var login = filter.getAsNullableString('login');
  if (login != null) {
    criteria.add({'login': login});
  }

  var active = filter.getAsNullableBoolean('active');
  if (active != null) {
    criteria.add({'active': active});
  }

  var toTime = filter.getAsNullableDateTime('to_create_time');
  if (toTime != null) {
    criteria.add({
      'create_time': {r'$lt': toTime}
    });
  }

  var fromTime = filter.getAsNullableDateTime('from_create_time');
  if (fromTime != null) {
    criteria.add({
      'create_time': {r'$gte': fromTime}
    });
  }

  var deleted = filter.getAsBooleanWithDefault('deleted', false);
  if (!deleted) {
    criteria.add({
      r'$or': [
        {'deleted': false},
        {
          'deleted': {r'$exists': false}
        }
      ]
    });
  }

  return criteria.isNotEmpty ? {r'$and': criteria} : null;
}