listTaskStatuses method
Lists task status records using the provided request filters.
Implementations SHOULD order results from newest to oldest.
Implementation
@override
Future<TaskStatusPage> listTaskStatuses(
TaskStatusListRequest request,
) async {
_pruneExpired();
if (request.limit <= 0) {
return const TaskStatusPage(items: []);
}
final matches = _entries.values.where((entry) {
if (request.state != null && entry.status.state != request.state) {
return false;
}
if (request.queue != null) {
final queue = entry.status.meta['queue']?.toString();
if (queue != request.queue) {
return false;
}
}
if (!_matchesMeta(entry.status.meta, request.meta)) {
return false;
}
return true;
}).toList()..sort((a, b) => b.updatedAt.compareTo(a.updatedAt));
final offset = request.offset;
final limit = request.limit;
final pageItems = matches
.skip(offset)
.take(limit)
.map((entry) {
return TaskStatusRecord(
status: entry.status,
createdAt: entry.createdAt,
updatedAt: entry.updatedAt,
);
})
.toList(growable: false);
final hasNext = matches.length > offset + limit;
return TaskStatusPage(
items: pageItems,
nextOffset: hasNext ? offset + limit : null,
);
}