diff --git a/app/plugin_api.go b/app/plugin_api.go index 62b22f6f3b..bee7321c8d 100644 --- a/app/plugin_api.go +++ b/app/plugin_api.go @@ -158,6 +158,10 @@ func (api *PluginAPI) UpdateTeamMemberRoles(teamId, userId, newRoles string) (*m return api.app.UpdateTeamMemberRoles(teamId, userId, newRoles) } +func (api *PluginAPI) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) { + return api.app.GetTeamStats(teamId) +} + func (api *PluginAPI) CreateUser(user *model.User) (*model.User, *model.AppError) { return api.app.CreateUser(user) } diff --git a/app/team_test.go b/app/team_test.go index 9256ffd103..d18402be61 100644 --- a/app/team_test.go +++ b/app/team_test.go @@ -729,3 +729,15 @@ func TestGetTeamMembers(t *testing.T) { assert.Equal(t, userIDs[i], member.UserId) } } + +func TestGetTeamStats(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + + teamStats, err := th.App.GetTeamStats(th.BasicTeam.Id) + require.Nil(t, err) + require.NotNil(t, teamStats) + members, err := th.App.GetTeamMembers(th.BasicTeam.Id, 0, 5) + require.Nil(t, err) + assert.Equal(t, int64(len(members)), teamStats.TotalMemberCount) +} diff --git a/plugin/api.go b/plugin/api.go index 33fa6b54a7..2e8bbcb4e6 100644 --- a/plugin/api.go +++ b/plugin/api.go @@ -293,6 +293,11 @@ type API interface { // Minimum server version: 5.6 GetPostsForChannel(channelId string, page, perPage int) (*model.PostList, *model.AppError) + // GetTeamStats gets a team's statistics + // + // Minimum server version: 5.8 + GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) + // UpdatePost updates a post. UpdatePost(post *model.Post) (*model.Post, *model.AppError) diff --git a/plugin/client_rpc_generated.go b/plugin/client_rpc_generated.go index 6d60cd3458..383cd6af1d 100644 --- a/plugin/client_rpc_generated.go +++ b/plugin/client_rpc_generated.go @@ -2527,6 +2527,35 @@ func (s *apiRPCServer) GetPostsForChannel(args *Z_GetPostsForChannelArgs, return return nil } +type Z_GetTeamStatsArgs struct { + A string +} + +type Z_GetTeamStatsReturns struct { + A *model.TeamStats + B *model.AppError +} + +func (g *apiRPCClient) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) { + _args := &Z_GetTeamStatsArgs{teamId} + _returns := &Z_GetTeamStatsReturns{} + if err := g.client.Call("Plugin.GetTeamStats", _args, _returns); err != nil { + log.Printf("RPC call to GetTeamStats API failed: %s", err.Error()) + } + return _returns.A, _returns.B +} + +func (s *apiRPCServer) GetTeamStats(args *Z_GetTeamStatsArgs, returns *Z_GetTeamStatsReturns) error { + if hook, ok := s.impl.(interface { + GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) + }); ok { + returns.A, returns.B = hook.GetTeamStats(args.A) + } else { + return encodableError(fmt.Errorf("API GetTeamStats called but not implemented.")) + } + return nil +} + type Z_UpdatePostArgs struct { A *model.Post } diff --git a/plugin/plugintest/api.go b/plugin/plugintest/api.go index a7771f4f7e..78fcb2d466 100644 --- a/plugin/plugintest/api.go +++ b/plugin/plugintest/api.go @@ -1291,6 +1291,31 @@ func (_m *API) GetTeamMembers(teamId string, page int, perPage int) ([]*model.Te return r0, r1 } +// GetTeamStats provides a mock function with given fields: teamId +func (_m *API) GetTeamStats(teamId string) (*model.TeamStats, *model.AppError) { + ret := _m.Called(teamId) + + var r0 *model.TeamStats + if rf, ok := ret.Get(0).(func(string) *model.TeamStats); ok { + r0 = rf(teamId) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*model.TeamStats) + } + } + + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { + r1 = rf(teamId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 +} + // GetTeams provides a mock function with given fields: func (_m *API) GetTeams() ([]*model.Team, *model.AppError) { ret := _m.Called()