1
0
mirror of https://github.com/interviewstreet/go-jira.git synced 2024-11-24 08:22:42 +02:00

[PROJECTS] Add: Projects Pagination API

This commit is contained in:
Chhekur 2021-11-02 12:14:11 +05:30 committed by Harendra Chhekur
parent b2e847f538
commit d739849439

View File

@ -3,6 +3,9 @@ package jira
import (
"context"
"fmt"
"net/url"
"strconv"
"strings"
"github.com/google/go-querystring/query"
)
@ -27,6 +30,17 @@ type ProjectList []struct {
IssueTypes []IssueType `json:"issueTypes,omitempty" structs:"issueTypes,omitempty"`
}
type ProjectSearchResult struct {
Projects ProjectList `json:"values,omitempty"`
IsLast bool `json:"isLast, omitempty"`
Self string `json:"self" structs:"self"`
NextPage string `json:"nextPage" structs:"nextPage"`
MaxResults int `json:"maxResults,omitempty"`
StartAt int `json:"startAt,omitempty"`
Total int `json:"total" structs:"total"`
}
// ProjectCategory represents a single project category
type ProjectCategory struct {
Self string `json:"self" structs:"self,omitempty"`
@ -93,6 +107,46 @@ func (s *ProjectService) GetList() (*ProjectList, *Response, error) {
return s.GetListWithContext(context.Background())
}
func (s *ProjectService) Search(options *SearchOptions) (ProjectSearchResult, *Response, error) {
return s.SearchWithContext(context.Background(), options)
}
func (s *ProjectService) SearchWithContext(ctx context.Context, options *SearchOptions) (ProjectSearchResult, *Response, error) {
u := url.URL{
Path: "rest/api/2/project/search",
}
uv := url.Values{}
if options != nil {
if options.StartAt != 0 {
uv.Add("startAt", strconv.Itoa(options.StartAt))
}
if options.MaxResults != 0 {
uv.Add("maxResults", strconv.Itoa(options.MaxResults))
}
if options.Expand != "" {
uv.Add("expand", options.Expand)
}
if strings.Join(options.Fields, ",") != "" {
uv.Add("fields", strings.Join(options.Fields, ","))
}
}
u.RawQuery = uv.Encode()
req, err := s.client.NewRequestWithContext(ctx, "GET", u.String(), nil)
if err != nil {
return ProjectSearchResult{}, nil, err
}
v := new(ProjectSearchResult)
resp, err := s.client.Do(req, v)
if err != nil {
err = NewJiraError(resp, err)
}
return *v, resp, err
}
// ListWithOptionsWithContext gets all projects form Jira with optional query params, like &GetQueryOptions{Expand: "issueTypes"} to get
// a list of all projects and their supported issuetypes
//