diff --git a/app/export.go b/app/export.go index efc5a62fd4..b25abef801 100644 --- a/app/export.go +++ b/app/export.go @@ -113,14 +113,12 @@ func (a *App) ExportVersion(writer io.Writer) *model.AppError { func (a *App) ExportAllTeams(writer io.Writer) *model.AppError { afterId := strings.Repeat("0", 26) for { - result := <-a.Srv.Store.Team().GetAllForExportAfter(1000, afterId) + teams, err := a.Srv.Store.Team().GetAllForExportAfter(1000, afterId) - if result.Err != nil { - return result.Err + if err != nil { + return err } - teams := result.Data.([]*model.TeamForExport) - if len(teams) == 0 { break } diff --git a/store/sqlstore/team_store.go b/store/sqlstore/team_store.go index d65dc9ac99..ebe11cbafc 100644 --- a/store/sqlstore/team_store.go +++ b/store/sqlstore/team_store.go @@ -976,30 +976,27 @@ func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) store.Stor }) } -func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var data []*model.TeamForExport - if _, err := s.GetReplica().Select(&data, ` - SELECT - Teams.*, - Schemes.Name as SchemeName - FROM - Teams - LEFT JOIN - Schemes ON Teams.SchemeId = Schemes.Id - WHERE - Teams.Id > :AfterId - ORDER BY - Id - LIMIT - :Limit`, - map[string]interface{}{"AfterId": afterId, "Limit": limit}); err != nil { - result.Err = model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql_team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError) - return - } +func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, *model.AppError) { + var data []*model.TeamForExport + if _, err := s.GetReplica().Select(&data, ` + SELECT + Teams.*, + Schemes.Name as SchemeName + FROM + Teams + LEFT JOIN + Schemes ON Teams.SchemeId = Schemes.Id + WHERE + Teams.Id > :AfterId + ORDER BY + Id + LIMIT + :Limit`, + map[string]interface{}{"AfterId": afterId, "Limit": limit}); err != nil { + return nil, model.NewAppError("SqlTeamStore.GetAllTeams", "store.sql_team.get_all.app_error", nil, err.Error(), http.StatusInternalServerError) + } - result.Data = data - }) + return data, nil } func (s SqlTeamStore) GetUserTeamIds(userId string, allowFromCache bool) store.StoreChannel { diff --git a/store/store.go b/store/store.go index c435af733f..93f1bd6c53 100644 --- a/store/store.go +++ b/store/store.go @@ -120,7 +120,7 @@ type TeamStore interface { ResetAllTeamSchemes() StoreChannel ClearAllCustomRoleAssignments() StoreChannel AnalyticsGetTeamCountForScheme(schemeId string) StoreChannel - GetAllForExportAfter(limit int, afterId string) StoreChannel + GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, *model.AppError) GetTeamMembersForExport(userId string) ([]*model.TeamMemberForExport, *model.AppError) UserBelongsToTeams(userId string, teamIds []string) StoreChannel GetUserTeamIds(userId string, allowFromCache bool) StoreChannel diff --git a/store/storetest/mocks/TeamStore.go b/store/storetest/mocks/TeamStore.go index 19439e470e..3b6f5f2179 100644 --- a/store/storetest/mocks/TeamStore.go +++ b/store/storetest/mocks/TeamStore.go @@ -147,19 +147,28 @@ func (_m *TeamStore) GetAll() ([]*model.Team, *model.AppError) { } // GetAllForExportAfter provides a mock function with given fields: limit, afterId -func (_m *TeamStore) GetAllForExportAfter(limit int, afterId string) store.StoreChannel { +func (_m *TeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, *model.AppError) { ret := _m.Called(limit, afterId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(int, string) store.StoreChannel); ok { + var r0 []*model.TeamForExport + if rf, ok := ret.Get(0).(func(int, string) []*model.TeamForExport); ok { r0 = rf(limit, afterId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.TeamForExport) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(int, string) *model.AppError); ok { + r1 = rf(limit, afterId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetAllPage provides a mock function with given fields: offset, limit diff --git a/store/storetest/team_store.go b/store/storetest/team_store.go index da064196eb..f3de754ec1 100644 --- a/store/storetest/team_store.go +++ b/store/storetest/team_store.go @@ -1611,9 +1611,8 @@ func testTeamStoreGetAllForExportAfter(t *testing.T, ss store.Store) { _, err := ss.Team().Save(&t1) require.Nil(t, err) - r1 := <-ss.Team().GetAllForExportAfter(10000, strings.Repeat("0", 26)) - assert.Nil(t, r1.Err) - d1 := r1.Data.([]*model.TeamForExport) + d1, err := ss.Team().GetAllForExportAfter(10000, strings.Repeat("0", 26)) + assert.Nil(t, err) found := false for _, team := range d1 {