From 793efb15f62578a32d6b2a557a21745c8f8d42be Mon Sep 17 00:00:00 2001 From: Bolarinwa Balogun Date: Wed, 12 Jun 2019 13:31:17 -0400 Subject: [PATCH] [MM-16184] Migrate "Team.GetChannelUnreadsForTeam" to Sync by default (#11139) * [MM-16184] Migrate "Team.GetChannelUnreadsForTeam" to Sync by default * Fix weird indentation --- app/team.go | 7 +++--- store/sqlstore/team_store.go | 38 ++++++++++++++---------------- store/store.go | 2 +- store/storetest/mocks/TeamStore.go | 19 +++++++++++---- store/storetest/team_store.go | 5 ++-- 5 files changed, 38 insertions(+), 33 deletions(-) diff --git a/app/team.go b/app/team.go index 140fa13e5e..cf88145c32 100644 --- a/app/team.go +++ b/app/team.go @@ -797,12 +797,11 @@ func (a *App) AddTeamMemberByInviteId(inviteId, userId string) (*model.TeamMembe } func (a *App) GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.AppError) { - result := <-a.Srv.Store.Team().GetChannelUnreadsForTeam(teamId, userId) - if result.Err != nil { - return nil, result.Err + channelUnreads, err := a.Srv.Store.Team().GetChannelUnreadsForTeam(teamId, userId) + if err != nil { + return nil, err } - channelUnreads := result.Data.([]*model.ChannelUnread) var teamUnread = &model.TeamUnread{ MsgCount: 0, MentionCount: 0, diff --git a/store/sqlstore/team_store.go b/store/sqlstore/team_store.go index 1118d7ff88..12da8b0dff 100644 --- a/store/sqlstore/team_store.go +++ b/store/sqlstore/team_store.go @@ -788,27 +788,25 @@ func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string) }) } -func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var data []*model.ChannelUnread - _, err := s.GetReplica().Select(&data, - `SELECT - Channels.TeamId TeamId, Channels.Id ChannelId, (Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount, ChannelMembers.MentionCount MentionCount, ChannelMembers.NotifyProps NotifyProps - FROM - Channels, ChannelMembers - WHERE - Id = ChannelId - AND UserId = :UserId - AND TeamId = :TeamId - AND DeleteAt = 0`, - map[string]interface{}{"TeamId": teamId, "UserId": userId}) +func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.ChannelUnread, *model.AppError) { + query := ` + SELECT + Channels.TeamId TeamId, Channels.Id ChannelId, (Channels.TotalMsgCount - ChannelMembers.MsgCount) MsgCount, ChannelMembers.MentionCount MentionCount, ChannelMembers.NotifyProps NotifyProps + FROM + Channels, ChannelMembers + WHERE + Id = ChannelId + AND UserId = :UserId + AND TeamId = :TeamId + AND DeleteAt = 0` - if err != nil { - result.Err = model.NewAppError("SqlTeamStore.GetChannelUnreadsForTeam", "store.sql_team.get_unread.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError) - return - } - result.Data = data - }) + var channels []*model.ChannelUnread + _, err := s.GetReplica().Select(&channels, query, map[string]interface{}{"TeamId": teamId, "UserId": userId}) + + if err != nil { + return nil, model.NewAppError("SqlTeamStore.GetChannelUnreadsForTeam", "store.sql_team.get_unread.app_error", nil, "teamId="+teamId+" "+err.Error(), http.StatusInternalServerError) + } + return channels, nil } func (s SqlTeamStore) RemoveMember(teamId string, userId string) store.StoreChannel { diff --git a/store/store.go b/store/store.go index 0eb7448ed1..b0f23d4e50 100644 --- a/store/store.go +++ b/store/store.go @@ -110,7 +110,7 @@ type TeamStore interface { GetTeamsForUser(userId string) StoreChannel GetTeamsForUserWithPagination(userId string, page, perPage int) StoreChannel GetChannelUnreadsForAllTeams(excludeTeamId, userId string) StoreChannel - GetChannelUnreadsForTeam(teamId, userId string) StoreChannel + GetChannelUnreadsForTeam(teamId, userId string) ([]*model.ChannelUnread, *model.AppError) RemoveMember(teamId string, userId string) StoreChannel RemoveAllMembersByTeam(teamId string) StoreChannel RemoveAllMembersByUser(userId string) StoreChannel diff --git a/store/storetest/mocks/TeamStore.go b/store/storetest/mocks/TeamStore.go index 88470fd0e0..e644388b81 100644 --- a/store/storetest/mocks/TeamStore.go +++ b/store/storetest/mocks/TeamStore.go @@ -286,19 +286,28 @@ func (_m *TeamStore) GetChannelUnreadsForAllTeams(excludeTeamId string, userId s } // GetChannelUnreadsForTeam provides a mock function with given fields: teamId, userId -func (_m *TeamStore) GetChannelUnreadsForTeam(teamId string, userId string) store.StoreChannel { +func (_m *TeamStore) GetChannelUnreadsForTeam(teamId string, userId string) ([]*model.ChannelUnread, *model.AppError) { ret := _m.Called(teamId, userId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, string) store.StoreChannel); ok { + var r0 []*model.ChannelUnread + if rf, ok := ret.Get(0).(func(string, string) []*model.ChannelUnread); ok { r0 = rf(teamId, userId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.ChannelUnread) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + r1 = rf(teamId, userId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetMember provides a mock function with given fields: teamId, userId diff --git a/store/storetest/team_store.go b/store/storetest/team_store.go index a1b8e97ab4..5fdcef9b2e 100644 --- a/store/storetest/team_store.go +++ b/store/storetest/team_store.go @@ -1292,10 +1292,9 @@ func testGetChannelUnreadsForTeam(t *testing.T, ss store.Store) { cm2 := &model.ChannelMember{ChannelId: c2.Id, UserId: m1.UserId, NotifyProps: model.GetDefaultChannelNotifyProps(), MsgCount: 90} store.Must(ss.Channel().SaveMember(cm2)) - if r1 := <-ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId); r1.Err != nil { - t.Fatal(r1.Err) + if ms, err := ss.Team().GetChannelUnreadsForTeam(m1.TeamId, m1.UserId); err != nil { + t.Fatal(err) } else { - ms := r1.Data.([]*model.ChannelUnread) if len(ms) != 2 { t.Fatal("wrong length") }