read method
Tries to fetch payload from firestore
Implementation
Future<QueryResult> read(Query query, Firestore db) async {
if (query.limit == 1 && null != query.payload['id']) {
final id = query.payload['id'] ?? Uuid().v1();
final ref = db.collection(query.entityName).doc(id);
if (await ref.exists) {
final snapshot = await ref.get();
return QueryResult.success(query, payload: snapshot.map);
}
} else {
final ref = db.collection(query.entityName);
var dbQuery = QueryReference(ref.gateway, ref.path);
if (query.limit != null && query.limit! > 0) {
dbQuery = ref.limit(query.limit!);
}
for (final constraint in query.where) {
dbQuery = _applyConstraint(constraint, dbQuery);
}
final result = await dbQuery.get();
final json = <String, dynamic>{};
if (result.isNotEmpty) {
for (final snapshot in result) {
json.putIfAbsent(snapshot.id, () => snapshot.map);
}
}
return QueryResult.success(query, payload: json);
}
return QueryResult.failed(
query,
errorMsg: 'Could not read data from database',
);
}