queryDocuments method

  1. @override
Future<List<Map<String, dynamic>>> queryDocuments(
  1. String collection, {
  2. required Map<String, dynamic> where,
  3. int? limit,
  4. String? orderBy,
  5. bool descending = false,
})

Queries documents from the specified collection based on criteria

Implementation

@override
Future<List<Map<String, dynamic>>> queryDocuments(
  String collection, {
  required Map<String, dynamic> where,
  int? limit,
  String? orderBy,
  bool descending = false,
}) async {
  final documents = _documents;
  final collectionId = _sanitizeCollection(collection);

  final response = await documents.listDocuments(
    _documentsParent,
    collectionId,
    pageSize: limit != null && limit > 0 ? limit : null,
  );

  final docs = response.documents ?? [];
  final results = <Map<String, dynamic>>[];

  for (final doc in docs) {
    final decoded = _decodeDocument(doc);
    if (_matchesWhere(decoded, where)) {
      results.add(decoded);
    }
  }

  final orderField = orderBy?.trim();
  if (orderField != null && orderField.isNotEmpty) {
    results.sort((a, b) {
      final comparison = _compareValues(a[orderField], b[orderField]);
      return descending ? -comparison : comparison;
    });
  }

  if (limit != null && limit > 0 && results.length > limit) {
    return results.take(limit).toList();
  }

  return results;
}