Skip to content

Commit ce0d8d7

Browse files
authored
Update Get Workspace Members to return response as a struct (ktrysmt#196)
1 parent dd228ff commit ce0d8d7

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

workspaces.go

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ type ProjectsRes struct {
4343
Items []Project
4444
}
4545

46+
type WorkspaceMembers struct {
47+
Page int
48+
Pagelen int
49+
Size int
50+
Members []User
51+
}
52+
4653
func (t *Permission) GetUserPermissions(organization, member string) (*Permission, error) {
4754
urlStr := t.c.requestUrl("/workspaces/%s/permissions?q=user.nickname=\"%s\"", organization, member)
4855
response, err := t.c.executePaginated("GET", urlStr, "")
@@ -83,9 +90,14 @@ func (t *Workspace) Get(workspace string) (*Workspace, error) {
8390
return decodeWorkspace(response)
8491
}
8592

86-
func (w *Workspace) Members(teamname string) (interface{}, error) {
93+
func (w *Workspace) Members(teamname string) (*WorkspaceMembers, error) {
8794
urlStr := w.c.requestUrl("/workspaces/%s/members", teamname)
88-
return w.c.execute("GET", urlStr, "")
95+
response, err := w.c.execute("GET", urlStr, "")
96+
if err != nil {
97+
return nil, err
98+
}
99+
100+
return decodeMembers(response)
89101
}
90102

91103
func (w *Workspace) Projects(teamname string) (*ProjectsRes, error) {
@@ -217,3 +229,43 @@ func decodeProjects(projectResponse interface{}) (*ProjectsRes, error) {
217229
}
218230
return &res, nil
219231
}
232+
233+
func decodeMembers(membersResponse interface{}) (*WorkspaceMembers, error) {
234+
responseMap, ok := membersResponse.(map[string]interface{})
235+
if !ok {
236+
return nil, errors.New("not a valid format")
237+
}
238+
239+
var members []User
240+
userArray := responseMap["values"].([]interface{})
241+
for _, userEntry := range userArray {
242+
userEntryMap := userEntry.(map[string]interface{})
243+
244+
member, err := decodeUser(userEntryMap["user"])
245+
if err != nil {
246+
return nil, err
247+
}
248+
members = append(members, *member)
249+
}
250+
251+
page, ok := responseMap["page"].(int)
252+
if !ok {
253+
page = 0
254+
}
255+
pagelen, ok := responseMap["pagelen"].(int)
256+
if !ok {
257+
pagelen = 0
258+
}
259+
size, ok := responseMap["size"].(int)
260+
if !ok {
261+
size = 0
262+
}
263+
264+
workspaceMembers := WorkspaceMembers{
265+
Page: page,
266+
Pagelen: pagelen,
267+
Size: size,
268+
Members: members,
269+
}
270+
return &workspaceMembers, nil
271+
}

0 commit comments

Comments
 (0)