From 209f70e80b9a90fe0964636f2e3a53fedf28a386 Mon Sep 17 00:00:00 2001 From: krjn <51929404+krjn@users.noreply.github.com> Date: Wed, 19 Jun 2019 08:23:08 +0000 Subject: [PATCH] Migrate Channel.GetChannelMembersTimezones to Sync by default (#11242) * Migrate Channel.GetChannelMembersTimezones to Sync by default [MM-16334] Fixes #11226 * refactor: style fixup --- app/channel.go | 7 +++--- store/sqlstore/channel_store.go | 36 +++++++++++++-------------- store/store.go | 2 +- store/storetest/mocks/ChannelStore.go | 19 ++++++++++---- 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/app/channel.go b/app/channel.go index 359c6110fb..53336ae6b2 100644 --- a/app/channel.go +++ b/app/channel.go @@ -1282,11 +1282,10 @@ func (a *App) GetChannelMembersPage(channelId string, page, perPage int) (*model } func (a *App) GetChannelMembersTimezones(channelId string) ([]string, *model.AppError) { - result := <-a.Srv.Store.Channel().GetChannelMembersTimezones(channelId) - if result.Err != nil { - return nil, result.Err + membersTimezones, err := a.Srv.Store.Channel().GetChannelMembersTimezones(channelId) + if err != nil { + return nil, err } - membersTimezones := result.Data.([]map[string]string) var timezones []string for _, membersTimezone := range membersTimezones { diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index 8c0318314f..40b9d29289 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -1401,25 +1401,23 @@ func (s SqlChannelStore) GetMembers(channelId string, offset, limit int) store.S }) } -func (s SqlChannelStore) GetChannelMembersTimezones(channelId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var dbMembersTimezone []map[string]string - _, err := s.GetReplica().Select(&dbMembersTimezone, ` - SELECT - Users.Timezone - FROM - ChannelMembers - LEFT JOIN - Users ON ChannelMembers.UserId = Id - WHERE ChannelId = :ChannelId - `, map[string]interface{}{ - "ChannelId": channelId}) - if err != nil { - result.Err = model.NewAppError("SqlChannelStore.GetChannelMembersTimezones", "store.sql_channel.get_members.app_error", nil, "channel_id="+channelId+","+err.Error(), http.StatusInternalServerError) - return - } - result.Data = dbMembersTimezone - }) +func (s SqlChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { + var dbMembersTimezone []model.StringMap + _, err := s.GetReplica().Select(&dbMembersTimezone, ` + SELECT + Users.Timezone + FROM + ChannelMembers + LEFT JOIN + Users ON ChannelMembers.UserId = Id + WHERE ChannelId = :ChannelId + `, map[string]interface{}{"ChannelId": channelId}) + + if err != nil { + return nil, model.NewAppError("SqlChannelStore.GetChannelMembersTimezones", "store.sql_channel.get_members.app_error", nil, "channel_id="+channelId+","+err.Error(), http.StatusInternalServerError) + } + + return dbMembersTimezone, nil } func (s SqlChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { diff --git a/store/store.go b/store/store.go index 4306ebc265..cea0c088cb 100644 --- a/store/store.go +++ b/store/store.go @@ -161,7 +161,7 @@ type ChannelStore interface { UpdateMember(member *model.ChannelMember) StoreChannel GetMembers(channelId string, offset, limit int) StoreChannel GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) - GetChannelMembersTimezones(channelId string) StoreChannel + GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) StoreChannel InvalidateAllChannelMembersForUser(userId string) IsUserInChannelUseCache(userId string, channelId string) bool diff --git a/store/storetest/mocks/ChannelStore.go b/store/storetest/mocks/ChannelStore.go index c6950d6283..de9424f61f 100644 --- a/store/storetest/mocks/ChannelStore.go +++ b/store/storetest/mocks/ChannelStore.go @@ -393,19 +393,28 @@ func (_m *ChannelStore) GetChannelMembersForExport(userId string, teamId string) } // GetChannelMembersTimezones provides a mock function with given fields: channelId -func (_m *ChannelStore) GetChannelMembersTimezones(channelId string) store.StoreChannel { +func (_m *ChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { ret := _m.Called(channelId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok { + var r0 []model.StringMap + if rf, ok := ret.Get(0).(func(string) []model.StringMap); ok { r0 = rf(channelId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]model.StringMap) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { + r1 = rf(channelId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetChannelUnread provides a mock function with given fields: channelId, userId