From f8e358f0f4df852dc96cfaae08d35b886620738c Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Fri, 24 Sep 2021 04:57:59 +0000 Subject: [PATCH] Remaining pagination support --- client/project.go | 30 ++++++++++++++++++++++-------- client/tag.go | 30 ++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/client/project.go b/client/project.go index 371236f..453a7e6 100644 --- a/client/project.go +++ b/client/project.go @@ -1,6 +1,7 @@ package client import "fmt" +import "net/url" type Project struct { GID string `json:"gid"` @@ -12,18 +13,31 @@ type projectResponse struct { } type projectsResponse struct { - Data []*Project `json:"data"` + Data []*Project `json:"data"` + NextPage *nextPage `json:"next_page"` } -func (wc *WorkspaceClient) GetProjects() ([]*Project, error) { - // TODO: Handle pagination +func (wc *WorkspaceClient) GetProjects() (ret []*Project, err error) { path := fmt.Sprintf("workspaces/%s/projects", wc.workspace.GID) - resp := &projectsResponse{} - err := wc.client.get(path, nil, resp) - if err != nil { - return nil, err + values := &url.Values{} + + for { + resp := &projectsResponse{} + err = wc.client.get(path, values, resp) + if err != nil { + return + } + + ret = append(ret, resp.Data...) + + if resp.NextPage == nil { + break + } + + values.Set("offset", resp.NextPage.Offset) } - return resp.Data, nil + + return } func (p *Project) String() string { diff --git a/client/tag.go b/client/tag.go index 841144d..e44a013 100644 --- a/client/tag.go +++ b/client/tag.go @@ -1,6 +1,7 @@ package client import "fmt" +import "net/url" type Tag struct { GID string `json:"gid"` @@ -8,18 +9,31 @@ type Tag struct { } type tagsResponse struct { - Data []*Tag `json:"data"` + Data []*Tag `json:"data"` + NextPage *nextPage `json:"next_page"` } -func (wc *WorkspaceClient) GetTags() ([]*Tag, error) { - // TODO: Handle pagination +func (wc *WorkspaceClient) GetTags() (ret []*Tag, err error) { path := fmt.Sprintf("workspaces/%s/tags", wc.workspace.GID) - resp := &tagsResponse{} - err := wc.client.get(path, nil, resp) - if err != nil { - return nil, err + values := &url.Values{} + + for { + resp := &tagsResponse{} + err := wc.client.get(path, values, resp) + if err != nil { + return + } + + ret = append(ret, resp.Data...) + + if resp.NextPage == nil { + break + } + + values.Set("offset", resp.NextPage.Offset) } - return resp.Data, nil + + return } func (wc *WorkspaceClient) GetTagsByName() (map[string]*Tag, error) {