Skip to content
This repository was archived by the owner on Mar 17, 2021. It is now read-only.

Commit ab1d628

Browse files
authored
Merge pull request #37 from ko-da-k/feature/impl-team
2 parents 7d74f3b + 0267d88 commit ab1d628

File tree

2 files changed

+573
-0
lines changed

2 files changed

+573
-0
lines changed

team.go

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
package gapi
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"fmt"
7+
"io/ioutil"
8+
"net/url"
9+
)
10+
11+
type SearchTeam struct {
12+
TotalCount int64 `json:"totalCount,omitempty"`
13+
Teams []*Team `json:"teams,omitempty"`
14+
Page int64 `json:"page,omitempty"`
15+
PerPage int64 `json:"perPage,omitempty"`
16+
}
17+
18+
// Team consists of a get response
19+
// It's used in Add and Update API
20+
type Team struct {
21+
Id int64 `json:"id,omitempty"`
22+
OrgId int64 `json:"orgId,omitempty"`
23+
Name string `json:"name"`
24+
Email string `json:"email,omitempty"`
25+
AvatarUrl string `json:"avatarUrl,omitempty"`
26+
MemberCount int64 `json:"memberCount,omitempty"`
27+
Permission int64 `json:"permission,omitempty"`
28+
}
29+
30+
// TeamMember
31+
type TeamMember struct {
32+
OrgId int64 `json:"orgId,omitempty"`
33+
TeamId int64 `json:"teamId,omitempty"`
34+
UserId int64 `json:"userId,omitempty"`
35+
Email string `json:"email,omitempty"`
36+
Login string `json:"login,omitempty"`
37+
AvatarUrl string `json:"avatarUrl,omitempty"`
38+
Permission int64 `json:"permission,omitempty"`
39+
}
40+
41+
type Preferences struct {
42+
Theme string `json:"theme"`
43+
HomeDashboardId int64 `json:"homeDashboardId"`
44+
Timezone string `json:"timezone"`
45+
}
46+
47+
func (c *Client) SearchTeam(query string) (*SearchTeam, error) {
48+
var result SearchTeam
49+
50+
page := "1"
51+
perPage := "1000"
52+
path := "/api/teams/search"
53+
queryValues := url.Values{}
54+
queryValues.Set("page", page)
55+
queryValues.Set("perPage", perPage)
56+
queryValues.Set("query", query)
57+
58+
req, err := c.newRequest("GET", path, queryValues, nil)
59+
if err != nil {
60+
return nil, err
61+
}
62+
resp, err := c.Do(req)
63+
if err != nil {
64+
return nil, err
65+
}
66+
if resp.StatusCode != 200 {
67+
return nil, fmt.Errorf(resp.Status)
68+
}
69+
data, err := ioutil.ReadAll(resp.Body)
70+
if err != nil {
71+
return nil, err
72+
}
73+
if err := json.Unmarshal(data, &result); err != nil {
74+
return nil, err
75+
}
76+
return &result, nil
77+
}
78+
79+
func (c *Client) Team(id int64) (*Team, error) {
80+
var team Team
81+
82+
req, err := c.newRequest("GET", fmt.Sprintf("/api/teams/%d", id), nil, nil)
83+
if err != nil {
84+
return nil, err
85+
}
86+
resp, err := c.Do(req)
87+
if err != nil {
88+
return nil, err
89+
}
90+
if resp.StatusCode != 200 {
91+
return nil, fmt.Errorf(resp.Status)
92+
}
93+
data, err := ioutil.ReadAll(resp.Body)
94+
if err != nil {
95+
return nil, err
96+
}
97+
if err := json.Unmarshal(data, &team); err != nil {
98+
return nil, err
99+
}
100+
return &team, nil
101+
}
102+
103+
// AddTeam makes a new team
104+
// email arg is an optional value.
105+
// If you don't want to set email, please set "" (empty string).
106+
func (c *Client) AddTeam(name string, email string) error {
107+
path := fmt.Sprintf("/api/teams")
108+
team := Team{
109+
Name: name,
110+
Email: email,
111+
}
112+
data, err := json.Marshal(team)
113+
if err != nil {
114+
return err
115+
}
116+
req, err := c.newRequest("POST", path, nil, bytes.NewBuffer(data))
117+
if err != nil {
118+
return err
119+
}
120+
resp, err := c.Do(req)
121+
if err != nil {
122+
return err
123+
}
124+
if resp.StatusCode != 200 {
125+
return fmt.Errorf(resp.Status)
126+
}
127+
return nil
128+
}
129+
130+
func (c *Client) UpdateTeam(id int64, name string, email string) error {
131+
path := fmt.Sprintf("/api/teams/%d", id)
132+
team := Team{
133+
Name: name,
134+
}
135+
// add param if email exists
136+
if email != "" {
137+
team.Email = email
138+
}
139+
data, err := json.Marshal(team)
140+
if err != nil {
141+
return err
142+
}
143+
req, err := c.newRequest("PUT", path, nil, bytes.NewBuffer(data))
144+
if err != nil {
145+
return err
146+
}
147+
resp, err := c.Do(req)
148+
if err != nil {
149+
return err
150+
}
151+
if resp.StatusCode != 200 {
152+
return fmt.Errorf(resp.Status)
153+
}
154+
return nil
155+
}
156+
157+
func (c *Client) DeleteTeam(id int64) error {
158+
req, err := c.newRequest("DELETE", fmt.Sprintf("/api/teams/%d", id), nil, nil)
159+
if err != nil {
160+
return err
161+
}
162+
resp, err := c.Do(req)
163+
if err != nil {
164+
return err
165+
}
166+
if resp.StatusCode != 200 {
167+
return fmt.Errorf(resp.Status)
168+
}
169+
return nil
170+
}
171+
172+
func (c *Client) TeamMembers(id int64) ([]*TeamMember, error) {
173+
members := make([]*TeamMember, 0)
174+
175+
req, err := c.newRequest("GET", fmt.Sprintf("/api/teams/%d/members", id), nil, nil)
176+
if err != nil {
177+
return members, err
178+
}
179+
resp, err := c.Do(req)
180+
if err != nil {
181+
return members, err
182+
}
183+
if resp.StatusCode != 200 {
184+
return members, fmt.Errorf(resp.Status)
185+
}
186+
data, err := ioutil.ReadAll(resp.Body)
187+
if err != nil {
188+
return members, err
189+
}
190+
if err := json.Unmarshal(data, &members); err != nil {
191+
return members, err
192+
}
193+
return members, nil
194+
}
195+
196+
func (c *Client) AddTeamMember(id int64, userId int64) error {
197+
path := fmt.Sprintf("/api/teams/%d/members", id)
198+
member := TeamMember{UserId: userId}
199+
data, err := json.Marshal(member)
200+
if err != nil {
201+
return err
202+
}
203+
req, err := c.newRequest("POST", path, nil, bytes.NewBuffer(data))
204+
if err != nil {
205+
return err
206+
}
207+
resp, err := c.Do(req)
208+
if err != nil {
209+
return err
210+
}
211+
if resp.StatusCode != 200 {
212+
return fmt.Errorf(resp.Status)
213+
}
214+
return nil
215+
}
216+
217+
func (c *Client) RemoveMemberFromTeam(id int64, userId int64) error {
218+
path := fmt.Sprintf("/api/teams/%d/members/%d", id, userId)
219+
220+
req, err := c.newRequest("DELETE", path, nil, nil)
221+
if err != nil {
222+
return err
223+
}
224+
resp, err := c.Do(req)
225+
if err != nil {
226+
return err
227+
}
228+
if resp.StatusCode != 200 {
229+
return fmt.Errorf(resp.Status)
230+
}
231+
return nil
232+
}
233+
234+
func (c *Client) TeamPreferences(id int64) (*Preferences, error) {
235+
var preferences Preferences
236+
237+
req, err := c.newRequest("GET", fmt.Sprintf("/api/teams/%d/preferences", id), nil, nil)
238+
if err != nil {
239+
return nil, err
240+
}
241+
resp, err := c.Do(req)
242+
if err != nil {
243+
return nil, err
244+
}
245+
if resp.StatusCode != 200 {
246+
return nil, fmt.Errorf(resp.Status)
247+
}
248+
data, err := ioutil.ReadAll(resp.Body)
249+
if err != nil {
250+
return nil, err
251+
}
252+
if err := json.Unmarshal(data, &preferences); err != nil {
253+
return nil, err
254+
}
255+
return &preferences, nil
256+
}
257+
258+
func (c *Client) UpdateTeamPreferences(id int64, theme string, homeDashboardId int64, timezone string) error {
259+
path := fmt.Sprintf("/api/teams/%d", id)
260+
preferences := Preferences{
261+
Theme: theme,
262+
HomeDashboardId: homeDashboardId,
263+
Timezone: timezone,
264+
}
265+
data, err := json.Marshal(preferences)
266+
if err != nil {
267+
return err
268+
}
269+
req, err := c.newRequest("PUT", path, nil, bytes.NewBuffer(data))
270+
if err != nil {
271+
return err
272+
}
273+
resp, err := c.Do(req)
274+
if err != nil {
275+
return err
276+
}
277+
if resp.StatusCode != 200 {
278+
return fmt.Errorf(resp.Status)
279+
}
280+
return nil
281+
}

0 commit comments

Comments
 (0)