diff --git a/app/export.go b/app/export.go index a9953868b7..9e3143ad82 100644 --- a/app/export.go +++ b/app/export.go @@ -289,13 +289,11 @@ func (a *App) buildUserTeamAndChannelMemberships(userId string) (*[]UserTeamImpo func (a *App) buildUserChannelMemberships(userId string, teamId string) (*[]UserChannelImportData, *model.AppError) { var memberships []UserChannelImportData - result := <-a.Srv.Store.Channel().GetChannelMembersForExport(userId, teamId) - if result.Err != nil { - return nil, result.Err + members, err := a.Srv.Store.Channel().GetChannelMembersForExport(userId, teamId) + if err != nil { + return nil, err } - members := result.Data.([]*model.ChannelMemberForExport) - category := model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL preferences, err := a.GetPreferenceByCategoryForUser(userId, category) if err != nil && err.StatusCode != http.StatusNotFound { diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index c0ecfa7d27..799952af70 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -2509,40 +2509,37 @@ func (s SqlChannelStore) GetAllChannelsForExportAfter(limit int, afterId string) }) } -func (s SqlChannelStore) GetChannelMembersForExport(userId string, teamId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var members []*model.ChannelMemberForExport - _, err := s.GetReplica().Select(&members, ` - SELECT - ChannelMembers.ChannelId, - ChannelMembers.UserId, - ChannelMembers.Roles, - ChannelMembers.LastViewedAt, - ChannelMembers.MsgCount, - ChannelMembers.MentionCount, - ChannelMembers.NotifyProps, - ChannelMembers.LastUpdateAt, - ChannelMembers.SchemeUser, - ChannelMembers.SchemeAdmin, - (ChannelMembers.SchemeGuest IS NOT NULL AND ChannelMembers.SchemeGuest) as SchemeGuest, - Channels.Name as ChannelName - FROM - ChannelMembers - INNER JOIN - Channels ON ChannelMembers.ChannelId = Channels.Id - WHERE - ChannelMembers.UserId = :UserId - AND Channels.TeamId = :TeamId - AND Channels.DeleteAt = 0`, - map[string]interface{}{"TeamId": teamId, "UserId": userId}) +func (s SqlChannelStore) GetChannelMembersForExport(userId string, teamId string) ([]*model.ChannelMemberForExport, *model.AppError) { + var members []*model.ChannelMemberForExport + _, err := s.GetReplica().Select(&members, ` + SELECT + ChannelMembers.ChannelId, + ChannelMembers.UserId, + ChannelMembers.Roles, + ChannelMembers.LastViewedAt, + ChannelMembers.MsgCount, + ChannelMembers.MentionCount, + ChannelMembers.NotifyProps, + ChannelMembers.LastUpdateAt, + ChannelMembers.SchemeUser, + ChannelMembers.SchemeAdmin, + (ChannelMembers.SchemeGuest IS NOT NULL AND ChannelMembers.SchemeGuest) as SchemeGuest, + Channels.Name as ChannelName + FROM + ChannelMembers + INNER JOIN + Channels ON ChannelMembers.ChannelId = Channels.Id + WHERE + ChannelMembers.UserId = :UserId + AND Channels.TeamId = :TeamId + AND Channels.DeleteAt = 0`, + map[string]interface{}{"TeamId": teamId, "UserId": userId}) - if err != nil { - result.Err = model.NewAppError("SqlChannelStore.GetChannelMembersForExport", "store.sql_channel.get_members.app_error", nil, "teamId="+teamId+", userId="+userId+", err="+err.Error(), http.StatusInternalServerError) - return - } + if err != nil { + return nil, model.NewAppError("SqlChannelStore.GetChannelMembersForExport", "store.sql_channel.get_members.app_error", nil, "teamId="+teamId+", userId="+userId+", err="+err.Error(), http.StatusInternalServerError) + } - result.Data = members - }) + return members, nil } func (s SqlChannelStore) GetAllDirectChannelsForExportAfter(limit int, afterId string) store.StoreChannel { diff --git a/store/store.go b/store/store.go index cf199d88c0..12340db0a6 100644 --- a/store/store.go +++ b/store/store.go @@ -196,7 +196,7 @@ type ChannelStore interface { MigratePublicChannels() error GetAllChannelsForExportAfter(limit int, afterId string) StoreChannel GetAllDirectChannelsForExportAfter(limit int, afterId string) StoreChannel - GetChannelMembersForExport(userId string, teamId string) StoreChannel + GetChannelMembersForExport(userId string, teamId string) ([]*model.ChannelMemberForExport, *model.AppError) RemoveAllDeactivatedMembers(channelId string) StoreChannel GetChannelsBatchForIndexing(startTime, endTime int64, limit int) ([]*model.Channel, *model.AppError) UserBelongsToChannels(userId string, channelIds []string) (bool, *model.AppError) diff --git a/store/storetest/channel_store.go b/store/storetest/channel_store.go index eea753e6a0..7170635e12 100644 --- a/store/storetest/channel_store.go +++ b/store/storetest/channel_store.go @@ -3348,10 +3348,9 @@ func testChannelStoreGetChannelMembersForExport(t *testing.T, ss store.Store) { m2.NotifyProps = model.GetDefaultChannelNotifyProps() store.Must(ss.Channel().SaveMember(&m2)) - r1 := <-ss.Channel().GetChannelMembersForExport(u1.Id, t1.Id) - assert.Nil(t, r1.Err) + d1, err := ss.Channel().GetChannelMembersForExport(u1.Id, t1.Id) + assert.Nil(t, err) - d1 := r1.Data.([]*model.ChannelMemberForExport) assert.Len(t, d1, 1) cmfe1 := d1[0] diff --git a/store/storetest/mocks/ChannelStore.go b/store/storetest/mocks/ChannelStore.go index b11fed3d75..026e053936 100644 --- a/store/storetest/mocks/ChannelStore.go +++ b/store/storetest/mocks/ChannelStore.go @@ -368,19 +368,28 @@ func (_m *ChannelStore) GetChannelCounts(teamId string, userId string) (*model.C } // GetChannelMembersForExport provides a mock function with given fields: userId, teamId -func (_m *ChannelStore) GetChannelMembersForExport(userId string, teamId string) store.StoreChannel { +func (_m *ChannelStore) GetChannelMembersForExport(userId string, teamId string) ([]*model.ChannelMemberForExport, *model.AppError) { ret := _m.Called(userId, teamId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, string) store.StoreChannel); ok { + var r0 []*model.ChannelMemberForExport + if rf, ok := ret.Get(0).(func(string, string) []*model.ChannelMemberForExport); ok { r0 = rf(userId, teamId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.ChannelMemberForExport) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + r1 = rf(userId, teamId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetChannelMembersTimezones provides a mock function with given fields: channelId