private async Task <SearchResults> DoSearch(string jql, int maxToTake) { List <JiraIssue> results = new List <JiraIssue>(); var client = _jiraClientProvider.CreateClient(); int skip = 0; int originalMaxToTake = maxToTake; while (true) { var chunk = (await client .Issues .GetIssuesFromJqlAsync( jql: jql, maxIssues: Math.Min(_recordsPerBatch, maxToTake), startAt: skip)).ToArray(); maxToTake -= chunk.Length; foreach (var item in chunk) { results.Add(new JiraIssue(item, _customFieldReader)); } skip += chunk.Length; if (chunk.Length == 0) { break; } } return(new SearchResults(jql, originalMaxToTake, results.ToArray())); }
public async Task <Sprint> GetSprint(string boardName, string sprintName) { var client = _jiraClientProvider.CreateClient(); var boards = await client.RestClient.ExecuteRequestAsync <CollectionAPIModel <BoardAPIModel> >( method : RestSharp.Method.GET, resource : $@"/rest/agile/1.0/board?name={boardName}"); if (boards == null || boards.values.Length == 0) { throw new Exception($"Unable to find a board named {boardName}"); } int boardId = boards.values[0].id; var sprints = await client.RestClient.ExecuteRequestAsync <CollectionAPIModel <SprintAPIModel> >( method : RestSharp.Method.GET, resource : $@"/rest/agile/1.0/board/{boardId}/sprint"); var sprint = sprints.values.FirstOrDefault(p => p.name == sprintName); if (sprint != null) { return(new Sprint(sprint, GetStoryPointsPerSprint(sprint))); } else { throw new Exception($"Unable to find sprint {sprintName}. Pagination is not yet supported"); } }