MM-10140: API Implementation for Schemes related Endpoints (#8615)

* Implement basic scheme CRUD endpoints.

* Get All Schemes (Paged) Endpoint and store plumbing.

* Add get teams/channels for schemes.

* Fix unit tests.

* Review fixes.

* More review fixes.
Этот коммит содержится в:
George Goldberg
2018-05-03 14:00:26 +01:00
коммит произвёл Martin Kraft
родитель 7d5e85e413
Коммит 60cf74352f
22 изменённых файлов: 1303 добавлений и 5 удалений

Просмотреть файл

@@ -318,6 +318,14 @@ func (c *Client4) GetRolesRoute() string {
return fmt.Sprintf("/roles")
}
func (c *Client4) GetSchemesRoute() string {
return fmt.Sprintf("/schemes")
}
func (c *Client4) GetSchemeRoute(id string) string {
return c.GetSchemesRoute() + fmt.Sprintf("/%v", id)
}
func (c *Client4) GetAnalyticsRoute() string {
return fmt.Sprintf("/analytics")
}
@@ -3420,6 +3428,78 @@ func (c *Client4) PatchRole(roleId string, patch *RolePatch) (*Role, *Response)
}
}
// Schemes Section
// CreateScheme creates a new Scheme.
func (c *Client4) CreateScheme(scheme *Scheme) (*Scheme, *Response) {
if r, err := c.DoApiPost(c.GetSchemesRoute(), scheme.ToJson()); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return SchemeFromJson(r.Body), BuildResponse(r)
}
}
// GetScheme gets a single scheme by ID.
func (c *Client4) GetScheme(id string) (*Scheme, *Response) {
if r, err := c.DoApiGet(c.GetSchemeRoute(id), ""); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return SchemeFromJson(r.Body), BuildResponse(r)
}
}
// Get all schemes, sorted with the most recently created first, optionally filtered by scope.
func (c *Client4) GetSchemes(scope string, page int, perPage int) ([]*Scheme, *Response) {
if r, err := c.DoApiGet(c.GetSchemesRoute()+fmt.Sprintf("?scope=%v&page=%v&per_page=%v", scope, page, perPage), ""); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return SchemesFromJson(r.Body), BuildResponse(r)
}
}
// DeleteScheme deletes a single scheme by ID.
func (c *Client4) DeleteScheme(id string) (bool, *Response) {
if r, err := c.DoApiDelete(c.GetSchemeRoute(id)); err != nil {
return false, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return CheckStatusOK(r), BuildResponse(r)
}
}
// PatchScheme partially updates a scheme in the system. Any missing fields are not updated.
func (c *Client4) PatchScheme(id string, patch *SchemePatch) (*Scheme, *Response) {
if r, err := c.DoApiPut(c.GetSchemeRoute(id)+"/patch", patch.ToJson()); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return SchemeFromJson(r.Body), BuildResponse(r)
}
}
// Get the teams using this scheme, sorted alphabetically by display name.
func (c *Client4) GetTeamsForScheme(schemeId string, page int, perPage int) ([]*Team, *Response) {
if r, err := c.DoApiGet(c.GetSchemeRoute(schemeId)+fmt.Sprintf("/teams?page=%v&per_page=%v", page, perPage), ""); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return TeamListFromJson(r.Body), BuildResponse(r)
}
}
// Get the channels using this scheme, sorted alphabetically by display name.
func (c *Client4) GetChannelsForScheme(schemeId string, page int, perPage int) (ChannelList, *Response) {
if r, err := c.DoApiGet(c.GetSchemeRoute(schemeId)+fmt.Sprintf("/channels?page=%v&per_page=%v", page, perPage), ""); err != nil {
return nil, BuildErrorResponse(r, err)
} else {
defer closeBody(r)
return *ChannelListFromJson(r.Body), BuildResponse(r)
}
}
// Plugin Section
// UploadPlugin takes an io.Reader stream pointing to the contents of a .tar.gz plugin.

Просмотреть файл

@@ -29,6 +29,11 @@ type Scheme struct {
DefaultChannelUserRole string `json:"default_channel_user_role"`
}
type SchemePatch struct {
Name *string `json:"name"`
Description *string `json:"description"`
}
type SchemeIDPatch struct {
SchemeID *string `json:"scheme_id"`
}
@@ -44,6 +49,20 @@ func SchemeFromJson(data io.Reader) *Scheme {
return scheme
}
func SchemesToJson(schemes []*Scheme) string {
b, _ := json.Marshal(schemes)
return string(b)
}
func SchemesFromJson(data io.Reader) []*Scheme {
var schemes []*Scheme
if err := json.NewDecoder(data).Decode(&schemes); err == nil {
return schemes
} else {
return nil
}
}
func (scheme *Scheme) IsValid() bool {
if len(scheme.Id) != 26 {
return false
@@ -98,6 +117,26 @@ func (scheme *Scheme) IsValidForCreate() bool {
return true
}
func (scheme *Scheme) Patch(patch *SchemePatch) {
if patch.Name != nil {
scheme.Name = *patch.Name
}
if patch.Description != nil {
scheme.Description = *patch.Description
}
}
func (patch *SchemePatch) ToJson() string {
b, _ := json.Marshal(patch)
return string(b)
}
func SchemePatchFromJson(data io.Reader) *SchemePatch {
var patch *SchemePatch
json.NewDecoder(data).Decode(&patch)
return patch
}
func SchemeIDFromJson(data io.Reader) *string {
var p *SchemeIDPatch
json.NewDecoder(data).Decode(&p)