summaryrefslogtreecommitdiffstats
path: root/model
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-02-07 08:57:41 -0800
committerHarrison Healey <harrisonmhealey@gmail.com>2017-02-07 08:57:41 -0800
commitba18374bd1b2644e577247204fad17dd52913b9b (patch)
tree1399082cc810f0708497bc2fc95a6da49d793bd3 /model
parentd91fea65188a51dd41976cad47f9c8ebacd75a04 (diff)
downloadchat-ba18374bd1b2644e577247204fad17dd52913b9b.tar.gz
chat-ba18374bd1b2644e577247204fad17dd52913b9b.tar.bz2
chat-ba18374bd1b2644e577247204fad17dd52913b9b.zip
Implement a few team endpoints for APIv4 (#5296)
* Implement GET /teams/{team_id} endpoint for APIv4 * Implement GET /users/{user_id}/teams endpoint for APIv4 * Implement GET /teams/{team_id}/members/{user_id} endpoint for APIv4
Diffstat (limited to 'model')
-rw-r--r--model/client4.go43
-rw-r--r--model/team.go20
2 files changed, 59 insertions, 4 deletions
diff --git a/model/client4.go b/model/client4.go
index 42b96a730..88082869e 100644
--- a/model/client4.go
+++ b/model/client4.go
@@ -64,6 +64,14 @@ func (c *Client4) GetTeamsRoute() string {
return fmt.Sprintf("/teams")
}
+func (c *Client4) GetTeamRoute(teamId string) string {
+ return fmt.Sprintf(c.GetTeamsRoute()+"/%v", teamId)
+}
+
+func (c *Client4) GetTeamMemberRoute(teamId, userId string) string {
+ return fmt.Sprintf(c.GetTeamRoute(teamId)+"/members/%v", userId)
+}
+
func (c *Client4) GetChannelsRoute() string {
return fmt.Sprintf("/channels")
}
@@ -72,10 +80,6 @@ func (c *Client4) GetChannelRoute(channelId string) string {
return fmt.Sprintf(c.GetChannelsRoute()+"/%v", channelId)
}
-func (c *Client4) GetTeamRoute(teamId string) string {
- return fmt.Sprintf(c.GetTeamsRoute()+"/%v", teamId)
-}
-
func (c *Client4) DoApiGet(url string, etag string) (*http.Response, *AppError) {
return c.DoApiRequest(http.MethodGet, url, "", etag)
}
@@ -321,6 +325,37 @@ func (c *Client4) CreateTeam(team *Team) (*Team, *Response) {
}
}
+// GetTeam returns a team based on the provided team id string.
+func (c *Client4) GetTeam(teamId, etag string) (*Team, *Response) {
+ if r, err := c.DoApiGet(c.GetTeamRoute(teamId), etag); err != nil {
+ return nil, &Response{StatusCode: r.StatusCode, Error: err}
+ } else {
+ defer closeBody(r)
+ return TeamFromJson(r.Body), BuildResponse(r)
+ }
+}
+
+// GetTeamsForUser returns a list of teams a user is on. Must be logged in as the user
+// or be a system administrator.
+func (c *Client4) GetTeamsForUser(userId, etag string) ([]*Team, *Response) {
+ if r, err := c.DoApiGet(c.GetUserRoute(userId)+"/teams", etag); err != nil {
+ return nil, &Response{StatusCode: r.StatusCode, Error: err}
+ } else {
+ defer closeBody(r)
+ return TeamListFromJson(r.Body), BuildResponse(r)
+ }
+}
+
+// GetTeamMember returns a team member based on the provided team and user id strings.
+func (c *Client4) GetTeamMember(teamId, userId, etag string) (*TeamMember, *Response) {
+ if r, err := c.DoApiGet(c.GetTeamMemberRoute(teamId, userId), etag); err != nil {
+ return nil, &Response{StatusCode: r.StatusCode, Error: err}
+ } else {
+ defer closeBody(r)
+ return TeamMemberFromJson(r.Body), BuildResponse(r)
+ }
+}
+
// Channel Section
// CreateChannel creates a channel based on the provided channel struct.
diff --git a/model/team.go b/model/team.go
index 6b02dbdee..310ad2d91 100644
--- a/model/team.go
+++ b/model/team.go
@@ -112,6 +112,26 @@ func TeamMapFromJson(data io.Reader) map[string]*Team {
}
}
+func TeamListToJson(t []*Team) string {
+ b, err := json.Marshal(t)
+ if err != nil {
+ return ""
+ } else {
+ return string(b)
+ }
+}
+
+func TeamListFromJson(data io.Reader) []*Team {
+ decoder := json.NewDecoder(data)
+ var teams []*Team
+ err := decoder.Decode(&teams)
+ if err == nil {
+ return teams
+ } else {
+ return nil
+ }
+}
+
func (o *Team) Etag() string {
return Etag(o.Id, o.UpdateAt)
}