getPageByFilterEx method
Gets a page of data items retrieved by a given filter and sorted according to sort parameters.
This method shall be called by a public getPageByFilter method from child class that receives FilterParams and converts them into a filter function.
correlationId
(optional) transaction id to trace execution through call chain.filter
(optional) a filter JSON objectpaging
(optional) paging parameterssort
(optional) sorting JSON object Return Future that receives a data page. Throws error
Implementation
Future<DataPage<T>> getPageByFilterEx(
String? correlationId,
Map<String, dynamic>? filter,
PagingParams? paging,
Map<String, dynamic>? sort) async {
// Adjust max item count based on configuration
paging = paging ?? PagingParams();
var skip = paging.getSkip(-1);
var take = paging.getTake(maxPageSize);
var pagingEnabled = paging.total;
// Configure options
var query = mngquery.SelectorBuilder();
if (skip >= 0) query.skip(skip);
query.limit(take);
var selector = <String, dynamic>{};
if (filter != null && filter.isNotEmpty) {
selector[r'$query'] = filter;
}
if (sort != null) {
selector['orderby'] = sort;
}
query.raw(selector);
var items = <T>[];
var result = await collection?.find(query).toList();
for (var item in result ?? []) {
items.add(convertToPublic(item));
}
logger.trace(
correlationId, 'Retrieved %d from %s', [items.length, collectionName]);
if (pagingEnabled) {
var count = await collection?.count(selector) ?? 0;
return DataPage<T>(items, count);
} else {
return DataPage<T>(items, 0);
}
}