fetchStatesByIds method

  1. @override
Future<TrackerResult<List<Issue>>> fetchStatesByIds(
  1. List<String> issueIds
)
override

Returns minimal normalized issues for the supplied issueIds.

Used by reconciliation. Implementations MAY return a subset when issues no longer exist, and SHOULD include enough state for the scheduler to classify the issue (state, identifier, blockers when relevant).

Implementation

@override
Future<TrackerResult<List<Issue>>> fetchStatesByIds(
  List<String> issueIds,
) async {
  if (issueIds.isEmpty) {
    return const TrackerSuccess<List<Issue>>(<Issue>[]);
  }

  final result = await _executeRequest(
    query: _stateRefreshQuery,
    variables: <String, Object?>{'ids': issueIds},
  );

  return result.fold(TrackerError<List<Issue>>.new, (data) {
    final issuesNode =
        (data['issues'] as Map<String, dynamic>?) ??
        const <String, dynamic>{};
    final nodes =
        (issuesNode['nodes'] as List<dynamic>?) ?? const <dynamic>[];
    final issues = nodes
        .whereType<Map<String, dynamic>>()
        .map(_mapStateRefreshNode)
        .whereType<Issue>()
        .toList(growable: false);
    return TrackerSuccess<List<Issue>>(issues);
  });
}