forked from talbright/go-desk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
group_service.go
121 lines (111 loc) · 2.58 KB
/
group_service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package service
import (
"encoding/json"
. "github.com/talbright/go-desk/resource"
"net/http"
"net/url"
)
type GroupService struct {
client *Client
}
func NewGroupService(httpClient *Client) *GroupService {
s := &GroupService{client: httpClient}
return s
}
// Get retrieves a group.
// See Desk API: http://dev.desk.com/API/groups/#show
func (c *GroupService) Get(id string) (*Group, *http.Response, error) {
restful := Restful{}
group := NewGroup()
path := NewIdentityResourcePath(id, group)
resp, err := restful.
Get(path.Path()).
Json(group).
Client(c.client).
Do()
return group, resp, err
}
func (c *GroupService) GetUserGroups(id string) (*Page, *http.Response, error) {
restful := Restful{}
page := new(Page)
resp, err := restful.
Get("/api/v2/users/"+id+"/groups").
Json(page).
Client(c.client).
Do()
if err != nil {
return nil, resp, err
}
err = c.unravelPage(page)
if err != nil {
return nil, nil, err
}
return page, resp, err
}
// List group with filtering and pagination.
// See Desk API: http://dev.desk.com/API/groups/#list
func (c *GroupService) List(params *url.Values) (*Page, *http.Response, error) {
restful := Restful{}
page := new(Page)
path := NewResourcePath(NewGroup())
resp, err := restful.
Get(path.Path()).
Json(page).
Params(params).
Client(c.client).
Do()
if err != nil {
return nil, resp, err
}
err = c.unravelPage(page)
if err != nil {
return nil, nil, err
}
return page, resp, err
}
func (c *GroupService) Users(id string) (*Page, *http.Response, error) {
restful := Restful{}
page := new(Page)
path := NewIdentityResourcePath(id, NewGroup()).SetAction("users")
resp, err := restful.
Get(path.Path()).
Json(page).
Client(c.client).
Do()
if err != nil {
return nil, resp, err
}
err = c.unravelUserPage(page)
if err != nil {
return nil, nil, err
}
return page, resp, err
}
func (c *GroupService) unravelPage(page *Page) error {
group := new([]Group)
err := json.Unmarshal(*page.Embedded.RawEntries, &group)
if err != nil {
return err
}
page.Embedded.Entries = make([]interface{}, len(*group))
for i, v := range *group {
v.InitializeResource(v)
page.Embedded.Entries[i] = interface{}(v)
}
page.Embedded.RawEntries = nil
return err
}
func (c *GroupService) unravelUserPage(page *Page) error {
user := new([]User)
err := json.Unmarshal(*page.Embedded.RawEntries, &user)
if err != nil {
return err
}
page.Embedded.Entries = make([]interface{}, len(*user))
for i, v := range *user {
v.InitializeResource(v)
page.Embedded.Entries[i] = interface{}(v)
}
page.Embedded.RawEntries = nil
return err
}