diff --git a/app/export.go b/app/export.go index f432842466..efc5a62fd4 100644 --- a/app/export.go +++ b/app/export.go @@ -252,14 +252,12 @@ func (a *App) ExportAllUsers(writer io.Writer) *model.AppError { func (a *App) buildUserTeamAndChannelMemberships(userId string) (*[]UserTeamImportData, *model.AppError) { var memberships []UserTeamImportData - result := <-a.Srv.Store.Team().GetTeamMembersForExport(userId) + members, err := a.Srv.Store.Team().GetTeamMembersForExport(userId) - if result.Err != nil { - return nil, result.Err + if err != nil { + return nil, err } - members := result.Data.([]*model.TeamMemberForExport) - for _, member := range members { // Skip deleted. if member.DeleteAt != 0 { diff --git a/store/sqlstore/team_store.go b/store/sqlstore/team_store.go index a629201af0..3aaaed977e 100644 --- a/store/sqlstore/team_store.go +++ b/store/sqlstore/team_store.go @@ -1047,34 +1047,30 @@ func (s SqlTeamStore) GetUserTeamIds(userId string, allowFromCache bool) store.S }) } -func (s SqlTeamStore) GetTeamMembersForExport(userId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var members []*model.TeamMemberForExport - _, err := s.GetReplica().Select(&members, ` - SELECT - TeamMembers.TeamId, - TeamMembers.UserId, - TeamMembers.Roles, - TeamMembers.DeleteAt, - (TeamMembers.SchemeGuest IS NOT NULL AND TeamMembers.SchemeGuest) as SchemeGuest, - TeamMembers.SchemeUser, - TeamMembers.SchemeAdmin, - Teams.Name as TeamName - FROM - TeamMembers - INNER JOIN - Teams ON TeamMembers.TeamId = Teams.Id - WHERE - TeamMembers.UserId = :UserId - AND Teams.DeleteAt = 0`, - map[string]interface{}{"UserId": userId}) - if err != nil { - result.Err = model.NewAppError("SqlTeamStore.GetTeamMembersForExport", "store.sql_team.get_members.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError) - return - } - - result.Data = members - }) +func (s SqlTeamStore) GetTeamMembersForExport(userId string) ([]*model.TeamMemberForExport, *model.AppError) { + var members []*model.TeamMemberForExport + _, err := s.GetReplica().Select(&members, ` + SELECT + TeamMembers.TeamId, + TeamMembers.UserId, + TeamMembers.Roles, + TeamMembers.DeleteAt, + (TeamMembers.SchemeGuest IS NOT NULL AND TeamMembers.SchemeGuest) as SchemeGuest, + TeamMembers.SchemeUser, + TeamMembers.SchemeAdmin, + Teams.Name as TeamName + FROM + TeamMembers + INNER JOIN + Teams ON TeamMembers.TeamId = Teams.Id + WHERE + TeamMembers.UserId = :UserId + AND Teams.DeleteAt = 0`, + map[string]interface{}{"UserId": userId}) + if err != nil { + return nil, model.NewAppError("SqlTeamStore.GetTeamMembersForExport", "store.sql_team.get_members.app_error", nil, "userId="+userId+" "+err.Error(), http.StatusInternalServerError) + } + return members, nil } func (s SqlTeamStore) UserBelongsToTeams(userId string, teamIds []string) store.StoreChannel { diff --git a/store/store.go b/store/store.go index 88a2c3b2c9..cb74d670b2 100644 --- a/store/store.go +++ b/store/store.go @@ -121,7 +121,7 @@ type TeamStore interface { ClearAllCustomRoleAssignments() StoreChannel AnalyticsGetTeamCountForScheme(schemeId string) StoreChannel GetAllForExportAfter(limit int, afterId string) StoreChannel - GetTeamMembersForExport(userId string) StoreChannel + GetTeamMembersForExport(userId string) ([]*model.TeamMemberForExport, *model.AppError) UserBelongsToTeams(userId string, teamIds []string) StoreChannel GetUserTeamIds(userId string, allowFromCache bool) StoreChannel InvalidateAllTeamIdsForUser(userId string) diff --git a/store/storetest/mocks/TeamStore.go b/store/storetest/mocks/TeamStore.go index 1d4134cd10..91d2c731c8 100644 --- a/store/storetest/mocks/TeamStore.go +++ b/store/storetest/mocks/TeamStore.go @@ -445,19 +445,28 @@ func (_m *TeamStore) GetMembersByIds(teamId string, userIds []string, restrictio } // GetTeamMembersForExport provides a mock function with given fields: userId -func (_m *TeamStore) GetTeamMembersForExport(userId string) store.StoreChannel { +func (_m *TeamStore) GetTeamMembersForExport(userId string) ([]*model.TeamMemberForExport, *model.AppError) { ret := _m.Called(userId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok { + var r0 []*model.TeamMemberForExport + if rf, ok := ret.Get(0).(func(string) []*model.TeamMemberForExport); ok { r0 = rf(userId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.TeamMemberForExport) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { + r1 = rf(userId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetTeamsByScheme provides a mock function with given fields: schemeId, offset, limit diff --git a/store/storetest/team_store.go b/store/storetest/team_store.go index a2a1a52ddb..537bef3330 100644 --- a/store/storetest/team_store.go +++ b/store/storetest/team_store.go @@ -1652,10 +1652,9 @@ func testTeamStoreGetTeamMembersForExport(t *testing.T, ss store.Store) { m2 := &model.TeamMember{TeamId: t1.Id, UserId: u2.Id} store.Must(ss.Team().SaveMember(m2, -1)) - r1 := <-ss.Team().GetTeamMembersForExport(u1.Id) - assert.Nil(t, r1.Err) + d1, err := ss.Team().GetTeamMembersForExport(u1.Id) + assert.Nil(t, err) - d1 := r1.Data.([]*model.TeamMemberForExport) assert.Len(t, d1, 1) tmfe1 := d1[0]