From 00787974d0a87b1a54f15cf75d2dab398546b87e Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 4 Nov 2016 12:27:19 -0400 Subject: PLT-4481 Fix member count for team user lists and channel invite list (#4422) * Fix member count for team user lists and channel invite list * Fix client unit test --- store/sql_team_store.go | 35 ++++++++++++++++++++++++++++++++--- store/sql_team_store_test.go | 32 ++++++++++++++++++++++++++++---- store/store.go | 3 ++- 3 files changed, 62 insertions(+), 8 deletions(-) (limited to 'store') diff --git a/store/sql_team_store.go b/store/sql_team_store.go index cc425ccf6..00f1f5c61 100644 --- a/store/sql_team_store.go +++ b/store/sql_team_store.go @@ -467,7 +467,7 @@ func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int) StoreChan return storeChannel } -func (s SqlTeamStore) GetMemberCount(teamId string) StoreChannel { +func (s SqlTeamStore) GetTotalMemberCount(teamId string) StoreChannel { storeChannel := make(StoreChannel, 1) go func() { @@ -482,10 +482,39 @@ func (s SqlTeamStore) GetMemberCount(teamId string) StoreChannel { WHERE TeamMembers.UserId = Users.Id AND TeamMembers.TeamId = :TeamId - AND TeamMembers.DeleteAt = 0 + AND TeamMembers.DeleteAt = 0`, map[string]interface{}{"TeamId": teamId}) + if err != nil { + result.Err = model.NewLocAppError("SqlTeamStore.GetTotalMemberCount", "store.sql_team.get_member_count.app_error", nil, "teamId="+teamId+" "+err.Error()) + } else { + result.Data = count + } + + storeChannel <- result + close(storeChannel) + }() + + return storeChannel +} + +func (s SqlTeamStore) GetActiveMemberCount(teamId string) StoreChannel { + storeChannel := make(StoreChannel, 1) + + go func() { + result := StoreResult{} + + count, err := s.GetReplica().SelectInt(` + SELECT + count(*) + FROM + TeamMembers, + Users + WHERE + TeamMembers.UserId = Users.Id + AND TeamMembers.TeamId = :TeamId + AND TeamMembers.DeleteAt = 0 AND Users.DeleteAt = 0`, map[string]interface{}{"TeamId": teamId}) if err != nil { - result.Err = model.NewLocAppError("SqlTeamStore.GetMemberCount", "store.sql_team.get_member_count.app_error", nil, "teamId="+teamId+" "+err.Error()) + result.Err = model.NewLocAppError("SqlTeamStore.GetActiveMemberCount", "store.sql_team.get_member_count.app_error", nil, "teamId="+teamId+" "+err.Error()) } else { result.Data = count } diff --git a/store/sql_team_store_test.go b/store/sql_team_store_test.go index 46215d9be..0e472a961 100644 --- a/store/sql_team_store_test.go +++ b/store/sql_team_store_test.go @@ -482,11 +482,27 @@ func TestTeamStoreMemberCount(t *testing.T) { u1.Email = model.NewId() Must(store.User().Save(u1)) + u2 := &model.User{} + u2.Email = model.NewId() + u2.DeleteAt = 1 + Must(store.User().Save(u2)) + teamId1 := model.NewId() m1 := &model.TeamMember{TeamId: teamId1, UserId: u1.Id} Must(store.Team().SaveMember(m1)) - if result := <-store.Team().GetMemberCount(teamId1); result.Err != nil { + m2 := &model.TeamMember{TeamId: teamId1, UserId: u2.Id} + Must(store.Team().SaveMember(m2)) + + if result := <-store.Team().GetTotalMemberCount(teamId1); result.Err != nil { + t.Fatal(result.Err) + } else { + if result.Data.(int64) != 2 { + t.Fatal("wrong count") + } + } + + if result := <-store.Team().GetActiveMemberCount(teamId1); result.Err != nil { t.Fatal(result.Err) } else { if result.Data.(int64) != 1 { @@ -494,10 +510,18 @@ func TestTeamStoreMemberCount(t *testing.T) { } } - m2 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} - Must(store.Team().SaveMember(m2)) + m3 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} + Must(store.Team().SaveMember(m3)) + + if result := <-store.Team().GetTotalMemberCount(teamId1); result.Err != nil { + t.Fatal(result.Err) + } else { + if result.Data.(int64) != 2 { + t.Fatal("wrong count") + } + } - if result := <-store.Team().GetMemberCount(teamId1); result.Err != nil { + if result := <-store.Team().GetActiveMemberCount(teamId1); result.Err != nil { t.Fatal(result.Err) } else { if result.Data.(int64) != 1 { diff --git a/store/store.go b/store/store.go index 85a1ad398..b3d87da38 100644 --- a/store/store.go +++ b/store/store.go @@ -70,7 +70,8 @@ type TeamStore interface { GetMember(teamId string, userId string) StoreChannel GetMembers(teamId string, offset int, limit int) StoreChannel GetMembersByIds(teamId string, userIds []string) StoreChannel - GetMemberCount(teamId string) StoreChannel + GetTotalMemberCount(teamId string) StoreChannel + GetActiveMemberCount(teamId string) StoreChannel GetTeamsForUser(userId string) StoreChannel RemoveMember(teamId string, userId string) StoreChannel RemoveAllMembersByTeam(teamId string) StoreChannel -- cgit v1.2.3-1-g7c22