queryConstruction method

Query<Object?> queryConstruction(
  1. Query<Object?> query, {
  2. List<QueryType>? where,
  3. Map<String, bool>? orderby,
  4. int? limit,
  5. DocumentSnapshot<Object?>? startAfter,
})

Implementation

Query queryConstruction(Query query,
    {List<QueryType>? where,
    Map<String, bool>? orderby,
    int? limit,
    DocumentSnapshot? startAfter}) {
  try {
    where?.forEach((value) {
      switch (value.whereQueryType) {
        case WhereQueryType.isEqualTo:
          query = query.where(value.id, isEqualTo: value.value);
          break;
        case WhereQueryType.isLessThan:
          query = query.where(value.id, isLessThan: value.value);
          break;
        case WhereQueryType.isLessThanOrEqualTo:
          query = query.where(value.id, isLessThanOrEqualTo: value.value);
          break;
        case WhereQueryType.isGreaterThan:
          query = query.where(value.id, isGreaterThan: value.value);
          break;
        case WhereQueryType.isGreaterThanOrEqualTo:
          query = query.where(value.id, isGreaterThanOrEqualTo: value.value);
          break;
        case WhereQueryType.arrayContains:
          query = query.where(value.id, arrayContains: value.value);
          break;
        case WhereQueryType.arrayContainsAny:
          query = query.where(value.id, arrayContainsAny: value.value);
          break;
        case WhereQueryType.whereIn:
          query = query.where(value.id, whereIn: value.value);
          break;
        case WhereQueryType.whereNotIn:
          query = query.where(value.id, whereNotIn: value.value);
          break;
        case WhereQueryType.isNull:
          query = query.where(value.id, isNull: value.value);
          break;
        case WhereQueryType.isNotEqualTo:
          query = query.where(value.id, isNotEqualTo: value.value);
          break;
        default:
          var type = value.whereQueryType;
          throw UnknownQueryError(
              'Unknown query type $type', StackTrace.current);
      }
    });

    if (orderby != null) {
      orderby.forEach((key, value) {
        query = query.orderBy(key, descending: value);
      });
    }

    if (startAfter != null) {
      query = query.startAfterDocument(startAfter);
    }

    if (limit != null) {
      query = query.limit(limit);
    }

    return query;
  } catch (err, s) {
    throw FailedQueryConstructionError(err.toString(), s);
  }
}