listTaskStatuses method

  1. @override
Future<TaskStatusPage> listTaskStatuses(
  1. TaskStatusListRequest request
)
override

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,
  );
}