forked from jbogarin/go-cisco-webex-teams
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathteams_api.go
229 lines (179 loc) · 5.42 KB
/
teams_api.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
package webexteams
import (
"fmt"
"strings"
"time"
"github.com/go-resty/resty/v2"
"github.com/google/go-querystring/query"
"github.com/peterhellberg/link"
)
// TeamsService is the service to communicate with the Teams API endpoint
type TeamsService service
// Teams is the List of Teams
type Teams struct {
Items []Team `json:"items,omitempty"`
}
// Team is the Team definition
type Team struct {
ID string `json:"id,omitempty"` // Team ID.
Name string `json:"name,omitempty"` // Team Name.
CreatorID string `json:"creatorId,omitempty"` // Team creator ID.
Created time.Time `json:"created,omitempty"` // Team creation date/time.
}
// TeamUpdateRequest is the Team Update Request Object
type TeamUpdateRequest struct {
Name string `json:"name,omitempty"` // Team name.
}
// TeamCreateRequest is the Team Create Request Parameters
type TeamCreateRequest struct {
Name string `json:"name,omitempty"` // Team name.
}
// AddTeam is used to append a team to a slice of teams
func (teams *Teams) AddTeam(item Team) []Team {
teams.Items = append(teams.Items, item)
return teams.Items
}
func (s *TeamsService) teamsPagination(linkHeader string, size, max int) *Teams {
items := &Teams{}
for _, l := range link.Parse(linkHeader) {
if l.Rel == "next" {
response, err := s.client.R().
SetResult(&Teams{}).
SetError(&Error{}).
Get(l.URI)
if err != nil {
return nil
}
items = response.Result().(*Teams)
if size != 0 {
size = size + len(items.Items)
if size < max {
teams := s.teamsPagination(response.Header().Get("Link"), size, max)
for _, team := range teams.Items {
items.AddTeam(team)
}
}
} else {
teams := s.teamsPagination(response.Header().Get("Link"), size, max)
for _, team := range teams.Items {
items.AddTeam(team)
}
}
}
}
return items
}
// CreateTeam Creates a team.
/* Creates a team. The authenticated user is automatically added as a member of the team.
See the Team Memberships API to learn how to add more people to the team.
@param teamCreateRequest
@return Team
*/
func (s *TeamsService) CreateTeam(teamCreateRequest *TeamCreateRequest) (*Team, *resty.Response, error) {
path := "/teams/"
response, err := s.client.R().
SetBody(teamCreateRequest).
SetResult(&Team{}).
SetError(&Error{}).
Post(path)
if err != nil {
return nil, nil, err
}
result := response.Result().(*Team)
return result, response, err
}
// DeleteTeam Deletes a team, by ID.
/* Deletes a team, by ID.
Specify the team ID in the teamID parameter in the URI.
@param teamID Team ID.
@return
*/
func (s *TeamsService) DeleteTeam(teamID string) (*resty.Response, error) {
path := "/teams/{teamId}"
path = strings.Replace(path, "{"+"teamId"+"}", fmt.Sprintf("%v", teamID), -1)
response, err := s.client.R().
SetError(&Error{}).
Delete(path)
if err != nil {
return nil, err
}
return response, err
}
// GetTeam Shows details for a team, by ID.
/* Shows details for a team, by ID.
Specify the team ID in the teamID parameter in the URI.
@param teamID Team ID.
@return Team
*/
func (s *TeamsService) GetTeam(teamID string) (*Team, *resty.Response, error) {
path := "/teams/{teamId}"
path = strings.Replace(path, "{"+"teamId"+"}", fmt.Sprintf("%v", teamID), -1)
response, err := s.client.R().
SetResult(&Team{}).
SetError(&Error{}).
Get(path)
if err != nil {
return nil, nil, err
}
result := response.Result().(*Team)
return result, response, err
}
// ListTeamsQueryParams are the query params for the ListTeams API Call
type ListTeamsQueryParams struct {
Max int `url:"max,omitempty"` // Limit the maximum number of items in the response.
Paginate bool // Indicates if pagination is needed
}
// ListTeams Lists teams to which the authenticated user belongs.
/* Lists teams to which the authenticated user belongs.
@param "max" (int) Limit the maximum number of items in the response.
@param paginate (bool) indicates if pagination is needed
@return Teams
*/
func (s *TeamsService) ListTeams(queryParams *ListTeamsQueryParams) (*Teams, *resty.Response, error) {
path := "/teams/"
queryParamsString, _ := query.Values(queryParams)
response, err := s.client.R().
SetQueryString(queryParamsString.Encode()).
SetResult(&Teams{}).
SetError(&Error{}).
Get(path)
if err != nil {
return nil, nil, err
}
result := response.Result().(*Teams)
if queryParams.Paginate {
items := s.teamsPagination(response.Header().Get("Link"), 0, 0)
for _, team := range items.Items {
result.AddTeam(team)
}
} else {
if len(result.Items) < queryParams.Max {
items := s.teamsPagination(response.Header().Get("Link"), len(result.Items), queryParams.Max)
for _, team := range items.Items {
result.AddTeam(team)
}
}
}
return result, response, err
}
// UpdateTeam Updates details for a team, by ID.
/* Updates details for a team, by ID.
Specify the team ID in the teamID parameter in the URI.
@param teamID Team ID.
@param teamUpdateRequest
@return Team
*/
func (s *TeamsService) UpdateTeam(teamID string, teamUpdateRequest *TeamUpdateRequest) (*Team, *resty.Response, error) {
path := "/teams/{teamId}"
path = strings.Replace(path, "{"+"teamId"+"}", fmt.Sprintf("%v", teamID), -1)
response, err := s.client.R().
SetBody(teamUpdateRequest).
SetResult(&Team{}).
SetError(&Error{}).
Put(path)
if err != nil {
return nil, nil, err
}
result := response.Result().(*Team)
return result, response, err
}