add pagination to search

This commit is contained in:
Miles Maddox
2019-04-20 16:18:15 -05:00
parent 514c1491c7
commit 76dd1d8982
2 changed files with 31 additions and 14 deletions
+1
View File
@@ -777,5 +777,6 @@ type SearchResults struct {
Schema JSONTypeMap `json:"schema,omitempty" yaml:"schema,omitempty"` Schema JSONTypeMap `json:"schema,omitempty" yaml:"schema,omitempty"`
StartAt int `json:"startAt,omitempty" yaml:"startAt,omitempty"` StartAt int `json:"startAt,omitempty" yaml:"startAt,omitempty"`
Total int `json:"total,omitempty" yaml:"total,omitempty"` Total int `json:"total,omitempty" yaml:"total,omitempty"`
IsLast bool `json:"isLast,omitempty" yaml:"isLast,omitempty"`
WarningMessages WarningMessages `json:"warningMessages,omitempty" yaml:"warningMessages,omitempty"` WarningMessages WarningMessages `json:"warningMessages,omitempty" yaml:"warningMessages,omitempty"`
} }
+30 -14
View File
@@ -79,20 +79,36 @@ func (j *Jira) Search(sp SearchProvider) (*jiradata.SearchResults, error) {
func Search(ua HttpClient, endpoint string, sp SearchProvider) (*jiradata.SearchResults, error) { func Search(ua HttpClient, endpoint string, sp SearchProvider) (*jiradata.SearchResults, error) {
req := sp.ProvideSearchRequest() req := sp.ProvideSearchRequest()
encoded, err := json.Marshal(req) results := &jiradata.SearchResults{}
if err != nil { issues := jiradata.Issues{}
return nil, err for {
} encoded, err := json.Marshal(req)
uri := URLJoin(endpoint, "rest/api/2/search") if err != nil {
resp, err := ua.Post(uri, "application/json", bytes.NewBuffer(encoded)) return nil, err
if err != nil { }
return nil, err uri := URLJoin(endpoint, "rest/api/2/search")
} resp, err := ua.Post(uri, "application/json", bytes.NewBuffer(encoded))
defer resp.Body.Close() if err != nil {
return nil, err
}
if resp.StatusCode == 200 { if resp.StatusCode != 200 {
results := &jiradata.SearchResults{} return nil, responseError(resp)
return results, readJSON(resp.Body, results) }
err = readJSON(resp.Body, results)
if err != nil {
return nil, err
}
issues = append(issues, results.Issues...)
req.StartAt = len(issues)
if len(issues) == results.Total || results.Total == 0 {
break
}
resp.Body.Close()
} }
return nil, responseError(resp) results.Issues = issues
return results, nil
} }