diff --git a/api4/apitestlib.go b/api4/apitestlib.go index b6354bd08b..3ab9785e20 100644 --- a/api4/apitestlib.go +++ b/api4/apitestlib.go @@ -765,8 +765,7 @@ func (me *TestHelper) MakeUserChannelAdmin(user *model.User, channel *model.Chan func (me *TestHelper) UpdateUserToTeamAdmin(user *model.User, team *model.Team) { utils.DisableDebugLogForTest() - if tmr := <-me.App.Srv.Store.Team().GetMember(team.Id, user.Id); tmr.Err == nil { - tm := tmr.Data.(*model.TeamMember) + if tm, err := me.App.Srv.Store.Team().GetMember(team.Id, user.Id); err == nil { tm.SchemeAdmin = true if sr := <-me.App.Srv.Store.Team().UpdateMember(tm); sr.Err != nil { utils.EnableDebugLogForTest() @@ -774,10 +773,10 @@ func (me *TestHelper) UpdateUserToTeamAdmin(user *model.User, team *model.Team) } } else { utils.EnableDebugLogForTest() - mlog.Error(tmr.Err.Error()) + mlog.Error(err.Error()) time.Sleep(time.Second) - panic(tmr.Err) + panic(err) } utils.EnableDebugLogForTest() @@ -786,8 +785,7 @@ func (me *TestHelper) UpdateUserToTeamAdmin(user *model.User, team *model.Team) func (me *TestHelper) UpdateUserToNonTeamAdmin(user *model.User, team *model.Team) { utils.DisableDebugLogForTest() - if tmr := <-me.App.Srv.Store.Team().GetMember(team.Id, user.Id); tmr.Err == nil { - tm := tmr.Data.(*model.TeamMember) + if tm, err := me.App.Srv.Store.Team().GetMember(team.Id, user.Id); err == nil { tm.SchemeAdmin = false if sr := <-me.App.Srv.Store.Team().UpdateMember(tm); sr.Err != nil { utils.EnableDebugLogForTest() @@ -795,10 +793,10 @@ func (me *TestHelper) UpdateUserToNonTeamAdmin(user *model.User, team *model.Tea } } else { utils.EnableDebugLogForTest() - mlog.Error(tmr.Err.Error()) + mlog.Error(err.Error()) time.Sleep(time.Second) - panic(tmr.Err) + panic(err) } utils.EnableDebugLogForTest() diff --git a/app/channel.go b/app/channel.go index d307f129b6..840b347b20 100644 --- a/app/channel.go +++ b/app/channel.go @@ -943,14 +943,11 @@ func (a *App) addUserToChannel(user *model.User, channel *model.Channel, teamMem } func (a *App) AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) { - tmchan := a.Srv.Store.Team().GetMember(channel.TeamId, user.Id) - var teamMember *model.TeamMember + teamMember, err := a.Srv.Store.Team().GetMember(channel.TeamId, user.Id) - result := <-tmchan - if result.Err != nil { - return nil, result.Err + if err != nil { + return nil, err } - teamMember = result.Data.(*model.TeamMember) if teamMember.DeleteAt > 0 { return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user.to.channel.failed.deleted.app_error", nil, "", http.StatusBadRequest) } diff --git a/app/team.go b/app/team.go index 008a26bc00..dba591ed6d 100644 --- a/app/team.go +++ b/app/team.go @@ -247,14 +247,13 @@ func (a *App) GetSchemeRolesForTeam(teamId string) (string, string, string, *mod } func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles string) (*model.TeamMember, *model.AppError) { - result := <-a.Srv.Store.Team().GetMember(teamId, userId) - if result.Err != nil { - return nil, result.Err + member, err := a.Srv.Store.Team().GetMember(teamId, userId) + if err != nil { + return nil, err } - member := result.Data.(*model.TeamMember) if member == nil { - err := model.NewAppError("UpdateTeamMemberRoles", "api.team.update_member_roles.not_a_member", nil, "userId="+userId+" teamId="+teamId, http.StatusBadRequest) + err = model.NewAppError("UpdateTeamMemberRoles", "api.team.update_member_roles.not_a_member", nil, "userId="+userId+" teamId="+teamId, http.StatusBadRequest) return nil, err } @@ -305,7 +304,7 @@ func (a *App) UpdateTeamMemberRoles(teamId string, userId string, newRoles strin member.ExplicitRoles = strings.Join(newExplicitRoles, " ") - result = <-a.Srv.Store.Team().UpdateMember(member) + result := <-a.Srv.Store.Team().UpdateMember(member) if result.Err != nil { return nil, result.Err } @@ -508,8 +507,8 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem tm.SchemeAdmin = true } - etmr := <-a.Srv.Store.Team().GetMember(team.Id, user.Id) - if etmr.Err != nil { + rtm, err := a.Srv.Store.Team().GetMember(team.Id, user.Id) + if err != nil { // Membership appears to be missing. Lets try to add. tmr := <-a.Srv.Store.Team().SaveMember(tm, *a.Config().TeamSettings.MaxUsersPerTeam) if tmr.Err != nil { @@ -518,9 +517,7 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMem return tmr.Data.(*model.TeamMember), false, nil } - // Membership already exists. Check if deleted and and update, otherwise do nothing - rtm := etmr.Data.(*model.TeamMember) - + // Membership already exists. Check if deleted and update, otherwise do nothing // Do nothing if already added if rtm.DeleteAt == 0 { return rtm, true, nil @@ -683,11 +680,7 @@ func (a *App) GetTeamsForUser(userId string) ([]*model.Team, *model.AppError) { } func (a *App) GetTeamMember(teamId, userId string) (*model.TeamMember, *model.AppError) { - result := <-a.Srv.Store.Team().GetMember(teamId, userId) - if result.Err != nil { - return nil, result.Err - } - return result.Data.(*model.TeamMember), nil + return a.Srv.Store.Team().GetMember(teamId, userId) } func (a *App) GetTeamMembersForUser(userId string) ([]*model.TeamMember, *model.AppError) { diff --git a/store/sqlstore/team_store.go b/store/sqlstore/team_store.go index bfc349a6b8..692236dc9e 100644 --- a/store/sqlstore/team_store.go +++ b/store/sqlstore/team_store.go @@ -587,30 +587,26 @@ func (s SqlTeamStore) UpdateMember(member *model.TeamMember) store.StoreChannel }) } -func (s SqlTeamStore) GetMember(teamId string, userId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - query := s.getTeamMembersWithSchemeSelectQuery(). - Where(sq.Eq{"TeamMembers.TeamId": teamId}). - Where(sq.Eq{"TeamMembers.UserId": userId}) +func (s SqlTeamStore) GetMember(teamId string, userId string) (*model.TeamMember, *model.AppError) { + query := s.getTeamMembersWithSchemeSelectQuery(). + Where(sq.Eq{"TeamMembers.TeamId": teamId}). + Where(sq.Eq{"TeamMembers.UserId": userId}) - queryString, args, err := query.ToSql() - if err != nil { - result.Err = model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.app_error", nil, err.Error(), http.StatusInternalServerError) - return - } + queryString, args, err := query.ToSql() + if err != nil { + return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.app_error", nil, err.Error(), http.StatusInternalServerError) + } - var dbMember teamMemberWithSchemeRoles - err = s.GetReplica().SelectOne(&dbMember, queryString, args...) - if err != nil { - if err == sql.ErrNoRows { - result.Err = model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.missing.app_error", nil, "teamId="+teamId+" userId="+userId+" "+err.Error(), http.StatusNotFound) - return - } - result.Err = model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.app_error", nil, "teamId="+teamId+" userId="+userId+" "+err.Error(), http.StatusInternalServerError) - return + var dbMember teamMemberWithSchemeRoles + err = s.GetReplica().SelectOne(&dbMember, queryString, args...) + if err != nil { + if err == sql.ErrNoRows { + return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.missing.app_error", nil, "teamId="+teamId+" userId="+userId+" "+err.Error(), http.StatusNotFound) } - result.Data = dbMember.ToModel() - }) + return nil, model.NewAppError("SqlTeamStore.GetMember", "store.sql_team.get_member.app_error", nil, "teamId="+teamId+" userId="+userId+" "+err.Error(), http.StatusInternalServerError) + } + + return dbMember.ToModel(), nil } func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) { diff --git a/store/store.go b/store/store.go index b0ef469005..e01bd58aa5 100644 --- a/store/store.go +++ b/store/store.go @@ -102,7 +102,7 @@ type TeamStore interface { AnalyticsTeamCount() (int64, *model.AppError) SaveMember(member *model.TeamMember, maxUsersPerTeam int) StoreChannel UpdateMember(member *model.TeamMember) StoreChannel - GetMember(teamId string, userId string) StoreChannel + GetMember(teamId string, userId string) (*model.TeamMember, *model.AppError) GetMembers(teamId string, offset int, limit int, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) GetMembersByIds(teamId string, userIds []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) GetTotalMemberCount(teamId string) (int64, *model.AppError) diff --git a/store/storetest/mocks/TeamStore.go b/store/storetest/mocks/TeamStore.go index 96cace42d8..6b0e4485f5 100644 --- a/store/storetest/mocks/TeamStore.go +++ b/store/storetest/mocks/TeamStore.go @@ -336,19 +336,28 @@ func (_m *TeamStore) GetChannelUnreadsForTeam(teamId string, userId string) ([]* } // GetMember provides a mock function with given fields: teamId, userId -func (_m *TeamStore) GetMember(teamId string, userId string) store.StoreChannel { +func (_m *TeamStore) GetMember(teamId string, userId string) (*model.TeamMember, *model.AppError) { ret := _m.Called(teamId, userId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, string) store.StoreChannel); ok { + var r0 *model.TeamMember + if rf, ok := ret.Get(0).(func(string, string) *model.TeamMember); ok { r0 = rf(teamId, userId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).(*model.TeamMember) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + r1 = rf(teamId, userId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetMembers provides a mock function with given fields: teamId, offset, limit, restrictions diff --git a/store/storetest/team_store.go b/store/storetest/team_store.go index 1dacf20158..f0e87a2510 100644 --- a/store/storetest/team_store.go +++ b/store/storetest/team_store.go @@ -1037,10 +1037,9 @@ func testGetTeamMember(t *testing.T, ss store.Store) { m1 := &model.TeamMember{TeamId: teamId1, UserId: model.NewId()} store.Must(ss.Team().SaveMember(m1, -1)) - if r := <-ss.Team().GetMember(m1.TeamId, m1.UserId); r.Err != nil { - t.Fatal(r.Err) + if rm1, err := ss.Team().GetMember(m1.TeamId, m1.UserId); err != nil { + t.Fatal(err) } else { - rm1 := r.Data.(*model.TeamMember) if rm1.TeamId != m1.TeamId { t.Fatal("bad team id") @@ -1051,11 +1050,11 @@ func testGetTeamMember(t *testing.T, ss store.Store) { } } - if r := <-ss.Team().GetMember(m1.TeamId, ""); r.Err == nil { + if _, err := ss.Team().GetMember(m1.TeamId, ""); err == nil { t.Fatal("empty user id - should have failed") } - if r := <-ss.Team().GetMember("", m1.UserId); r.Err == nil { + if _, err := ss.Team().GetMember("", m1.UserId); err == nil { t.Fatal("empty team id - should have failed") } @@ -1084,9 +1083,8 @@ func testGetTeamMember(t *testing.T, ss store.Store) { m2 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeUser: true} store.Must(ss.Team().SaveMember(m2, -1)) - r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId) - require.Nil(t, r2.Err) - m3 := r2.Data.(*model.TeamMember) + m3, err := ss.Team().GetMember(m2.TeamId, m2.UserId) + require.Nil(t, err) t.Log(m3) assert.Equal(t, s2.DefaultTeamUserRole, m3.Roles) @@ -1094,9 +1092,8 @@ func testGetTeamMember(t *testing.T, ss store.Store) { m4 := &model.TeamMember{TeamId: t2.Id, UserId: model.NewId(), SchemeGuest: true} store.Must(ss.Team().SaveMember(m4, -1)) - r3 := <-ss.Team().GetMember(m4.TeamId, m4.UserId) - require.Nil(t, r3.Err) - m5 := r3.Data.(*model.TeamMember) + m5, err := ss.Team().GetMember(m4.TeamId, m4.UserId) + require.Nil(t, err) assert.Equal(t, s2.DefaultTeamGuestRole, m5.Roles) } @@ -1440,23 +1437,20 @@ func testTeamStoreMigrateTeamMembers(t *testing.T, ss store.Store) { } } - res1 := <-ss.Team().GetMember(tm1.TeamId, tm1.UserId) - assert.Nil(t, res1.Err) - tm1b := res1.Data.(*model.TeamMember) + tm1b, err := ss.Team().GetMember(tm1.TeamId, tm1.UserId) + assert.Nil(t, err) assert.Equal(t, "", tm1b.ExplicitRoles) assert.True(t, tm1b.SchemeUser) assert.True(t, tm1b.SchemeAdmin) - res2 := <-ss.Team().GetMember(tm2.TeamId, tm2.UserId) - assert.Nil(t, res2.Err) - tm2b := res2.Data.(*model.TeamMember) + tm2b, err := ss.Team().GetMember(tm2.TeamId, tm2.UserId) + assert.Nil(t, err) assert.Equal(t, "", tm2b.ExplicitRoles) assert.True(t, tm2b.SchemeUser) assert.False(t, tm2b.SchemeAdmin) - res3 := <-ss.Team().GetMember(tm3.TeamId, tm3.UserId) - assert.Nil(t, res3.Err) - tm3b := res3.Data.(*model.TeamMember) + tm3b, err := ss.Team().GetMember(tm3.TeamId, tm3.UserId) + assert.Nil(t, err) assert.Equal(t, "something_else", tm3b.ExplicitRoles) assert.False(t, tm3b.SchemeUser) assert.False(t, tm3b.SchemeAdmin) @@ -1537,21 +1531,21 @@ func testTeamStoreClearAllCustomRoleAssignments(t *testing.T, ss store.Store) { require.Nil(t, (<-ss.Team().ClearAllCustomRoleAssignments()).Err) - r1 := <-ss.Team().GetMember(m1.TeamId, m1.UserId) - require.Nil(t, r1.Err) - assert.Equal(t, m1.ExplicitRoles, r1.Data.(*model.TeamMember).Roles) + r1, err := ss.Team().GetMember(m1.TeamId, m1.UserId) + require.Nil(t, err) + assert.Equal(t, m1.ExplicitRoles, r1.Roles) - r2 := <-ss.Team().GetMember(m2.TeamId, m2.UserId) - require.Nil(t, r2.Err) - assert.Equal(t, "team_user team_admin", r2.Data.(*model.TeamMember).Roles) + r2, err := ss.Team().GetMember(m2.TeamId, m2.UserId) + require.Nil(t, err) + assert.Equal(t, "team_user team_admin", r2.Roles) - r3 := <-ss.Team().GetMember(m3.TeamId, m3.UserId) - require.Nil(t, r3.Err) - assert.Equal(t, m3.ExplicitRoles, r3.Data.(*model.TeamMember).Roles) + r3, err := ss.Team().GetMember(m3.TeamId, m3.UserId) + require.Nil(t, err) + assert.Equal(t, m3.ExplicitRoles, r3.Roles) - r4 := <-ss.Team().GetMember(m4.TeamId, m4.UserId) - require.Nil(t, r4.Err) - assert.Equal(t, "", r4.Data.(*model.TeamMember).Roles) + r4, err := ss.Team().GetMember(m4.TeamId, m4.UserId) + require.Nil(t, err) + assert.Equal(t, "", r4.Roles) } func testTeamStoreAnalyticsGetTeamCountForScheme(t *testing.T, ss store.Store) {