diff --git a/app/analytics.go b/app/analytics.go index 06bfa325e1..01d10f111b 100644 --- a/app/analytics.go +++ b/app/analytics.go @@ -324,12 +324,10 @@ func (a *App) GetRecentlyActiveUsersForTeamPage(teamId string, page, perPage int } func (a *App) GetNewUsersForTeamPage(teamId string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) { - var users []*model.User - result := <-a.Srv.Store.User().GetNewUsersForTeam(teamId, page*perPage, perPage, viewRestrictions) - if result.Err != nil { - return nil, result.Err + users, err := a.Srv.Store.User().GetNewUsersForTeam(teamId, page*perPage, perPage, viewRestrictions) + if err != nil { + return nil, err } - users = result.Data.([]*model.User) return a.sanitizeProfiles(users, asAdmin), nil } diff --git a/store/sqlstore/user_store.go b/store/sqlstore/user_store.go index 36cc4d7fae..ce8277d365 100644 --- a/store/sqlstore/user_store.go +++ b/store/sqlstore/user_store.go @@ -824,34 +824,30 @@ func (us SqlUserStore) GetRecentlyActiveUsersForTeam(teamId string, offset, limi }) } -func (us SqlUserStore) GetNewUsersForTeam(teamId string, offset, limit int, viewRestrictions *model.ViewUsersRestrictions) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - query := us.usersQuery. - Join("TeamMembers tm ON (tm.UserId = u.Id AND tm.TeamId = ?)", teamId). - OrderBy("u.CreateAt DESC"). - OrderBy("u.Username ASC"). - Offset(uint64(offset)).Limit(uint64(limit)) +func (us SqlUserStore) GetNewUsersForTeam(teamId string, offset, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) { + query := us.usersQuery. + Join("TeamMembers tm ON (tm.UserId = u.Id AND tm.TeamId = ?)", teamId). + OrderBy("u.CreateAt DESC"). + OrderBy("u.Username ASC"). + Offset(uint64(offset)).Limit(uint64(limit)) - query = applyViewRestrictionsFilter(query, viewRestrictions, true) + query = applyViewRestrictionsFilter(query, viewRestrictions, true) - queryString, args, err := query.ToSql() - if err != nil { - result.Err = model.NewAppError("SqlUserStore.GetNewUsersForTeam", "store.sql_user.app_error", nil, err.Error(), http.StatusInternalServerError) - return - } + queryString, args, err := query.ToSql() + if err != nil { + return nil, model.NewAppError("SqlUserStore.GetNewUsersForTeam", "store.sql_user.app_error", nil, err.Error(), http.StatusInternalServerError) + } - var users []*model.User - if _, err := us.GetReplica().Select(&users, queryString, args...); err != nil { - result.Err = model.NewAppError("SqlUserStore.GetNewUsersForTeam", "store.sql_user.get_new_users.app_error", nil, err.Error(), http.StatusInternalServerError) - return - } + var users []*model.User + if _, err := us.GetReplica().Select(&users, queryString, args...); err != nil { + return nil, model.NewAppError("SqlUserStore.GetNewUsersForTeam", "store.sql_user.get_new_users.app_error", nil, err.Error(), http.StatusInternalServerError) + } - for _, u := range users { - u.Sanitize(map[string]bool{}) - } + for _, u := range users { + u.Sanitize(map[string]bool{}) + } - result.Data = users - }) + return users, nil } func (us SqlUserStore) GetProfileByIds(userIds []string, allowFromCache bool, viewRestrictions *model.ViewUsersRestrictions) store.StoreChannel { diff --git a/store/store.go b/store/store.go index 1404a085cf..a61fd16b2d 100644 --- a/store/store.go +++ b/store/store.go @@ -287,7 +287,7 @@ type UserStore interface { GetUnreadCountForChannel(userId string, channelId string) StoreChannel GetAnyUnreadPostCountForChannel(userId string, channelId string) StoreChannel GetRecentlyActiveUsersForTeam(teamId string, offset, limit int, viewRestrictions *model.ViewUsersRestrictions) StoreChannel - GetNewUsersForTeam(teamId string, offset, limit int, viewRestrictions *model.ViewUsersRestrictions) StoreChannel + GetNewUsersForTeam(teamId string, offset, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) Search(teamId string, term string, options *model.UserSearchOptions) StoreChannel SearchNotInTeam(notInTeamId string, term string, options *model.UserSearchOptions) StoreChannel SearchInChannel(channelId string, term string, options *model.UserSearchOptions) StoreChannel diff --git a/store/storetest/mocks/UserStore.go b/store/storetest/mocks/UserStore.go index 21ee68bcc2..9212df88de 100644 --- a/store/storetest/mocks/UserStore.go +++ b/store/storetest/mocks/UserStore.go @@ -382,19 +382,28 @@ func (_m *UserStore) GetForLogin(loginId string, allowSignInWithUsername bool, a } // GetNewUsersForTeam provides a mock function with given fields: teamId, offset, limit, viewRestrictions -func (_m *UserStore) GetNewUsersForTeam(teamId string, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) store.StoreChannel { +func (_m *UserStore) GetNewUsersForTeam(teamId string, offset int, limit int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) { ret := _m.Called(teamId, offset, limit, viewRestrictions) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, int, int, *model.ViewUsersRestrictions) store.StoreChannel); ok { + var r0 []*model.User + if rf, ok := ret.Get(0).(func(string, int, int, *model.ViewUsersRestrictions) []*model.User); ok { r0 = rf(teamId, offset, limit, viewRestrictions) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.User) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string, int, int, *model.ViewUsersRestrictions) *model.AppError); ok { + r1 = rf(teamId, offset, limit, viewRestrictions) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetProfileByGroupChannelIdsForUser provides a mock function with given fields: userId, channelIds diff --git a/store/storetest/user_store.go b/store/storetest/user_store.go index f014ac0fbe..44cd8b6837 100644 --- a/store/storetest/user_store.go +++ b/store/storetest/user_store.go @@ -2039,37 +2039,37 @@ func testUserStoreGetNewUsersForTeam(t *testing.T, ss store.Store) { store.Must(ss.Team().SaveMember(&model.TeamMember{TeamId: teamId2, UserId: u4.Id}, -1)) t.Run("get team 1, offset 0, limit 100", func(t *testing.T) { - result := <-ss.User().GetNewUsersForTeam(teamId, 0, 100, nil) - require.Nil(t, result.Err) + result, err := ss.User().GetNewUsersForTeam(teamId, 0, 100, nil) + require.Nil(t, err) assert.Equal(t, []*model.User{ sanitized(u3), sanitized(u2), sanitized(u1), - }, result.Data.([]*model.User)) + }, result) }) t.Run("get team 1, offset 0, limit 1", func(t *testing.T) { - result := <-ss.User().GetNewUsersForTeam(teamId, 0, 1, nil) - require.Nil(t, result.Err) + result, err := ss.User().GetNewUsersForTeam(teamId, 0, 1, nil) + require.Nil(t, err) assert.Equal(t, []*model.User{ sanitized(u3), - }, result.Data.([]*model.User)) + }, result) }) t.Run("get team 1, offset 2, limit 1", func(t *testing.T) { - result := <-ss.User().GetNewUsersForTeam(teamId, 2, 1, nil) - require.Nil(t, result.Err) + result, err := ss.User().GetNewUsersForTeam(teamId, 2, 1, nil) + require.Nil(t, err) assert.Equal(t, []*model.User{ sanitized(u1), - }, result.Data.([]*model.User)) + }, result) }) t.Run("get team 2, offset 0, limit 100", func(t *testing.T) { - result := <-ss.User().GetNewUsersForTeam(teamId2, 0, 100, nil) - require.Nil(t, result.Err) + result, err := ss.User().GetNewUsersForTeam(teamId2, 0, 100, nil) + require.Nil(t, err) assert.Equal(t, []*model.User{ sanitized(u4), - }, result.Data.([]*model.User)) + }, result) }) }