diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-02-07 08:57:41 -0800 |
---|---|---|
committer | Harrison Healey <harrisonmhealey@gmail.com> | 2017-02-07 08:57:41 -0800 |
commit | ba18374bd1b2644e577247204fad17dd52913b9b (patch) | |
tree | 1399082cc810f0708497bc2fc95a6da49d793bd3 /model | |
parent | d91fea65188a51dd41976cad47f9c8ebacd75a04 (diff) | |
download | chat-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.go | 43 | ||||
-rw-r--r-- | model/team.go | 20 |
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) } |