diff --git a/README.md b/README.md index 46479971..74cd52a5 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,14 @@ func main() { fmt.Printf("Status after transition: %+v\n", issue.Fields.Status.Name) } ``` +### Get all the issues for JQL with Pagination +Jira API has limit on maxResults it can return. You may have a usecase where you need to get all issues for given JQL. +This example shows reference implementation of GetAllIssues function which does pagination on Jira API to get all the issues for given JQL + +please look at [Pagination Example](https://github.com/andygrunwald/go-jira/blob/master/examples/pagination/main.go) + + + ### Call a not implemented API endpoint diff --git a/examples/pagination/main.go b/examples/pagination/main.go new file mode 100644 index 00000000..571e9e12 --- /dev/null +++ b/examples/pagination/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "fmt" + + jira "github.com/andygrunwald/go-jira" +) + +// GetAllIssues will implement pagination of api and get all the issues. +// Jira API has limitation as to maxResults it can return at one time. +// You may have usecase where you need to get all the issues according to jql +// This is where this example comes in. +func GetAllIssues(client *jira.Client, searchString string) ([]jira.Issue, error) { + last := 0 + var issues []jira.Issue + for { + opt := &jira.SearchOptions{ + MaxResults: 1000, // Max results can go up to 1000 + StartAt: last, + } + + chunk, resp, err := client.Issue.Search(searchString, opt) + if err != nil { + return nil, err + } + + total := resp.Total + if issues == nil { + issues = make([]jira.Issue, 0, total) + } + issues = append(issues, chunk...) + last = resp.StartAt + len(chunk) + if last >= total { + return issues, nil + } + } + +} + +func main() { + jiraClient, err := jira.NewClient(nil, "https://issues.apache.org/jira/") + if err != nil { + panic(err) + } + + jql := "project = Mesos and type = Bug and Status NOT IN (Resolved)" + fmt.Printf("Usecase: Running a JQL query '%s'\n", jql) + + issues, err := GetAllIssues(jiraClient, jql) + if err != nil { + panic(err) + } + fmt.Println(issues) + +}