diff --git a/api4/channel.go b/api4/channel.go index 2032ba29b4..bb89bee9b6 100644 --- a/api4/channel.go +++ b/api4/channel.go @@ -9,10 +9,10 @@ import ( "strconv" "strings" + "github.com/mattermost/mattermost-server/v5/app" "github.com/mattermost/mattermost-server/v5/audit" "github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/model" - "github.com/mattermost/mattermost-server/v5/store" ) func (api *API) InitChannel() { @@ -1473,7 +1473,7 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { isNewMembership := false if _, err = c.App.GetChannelMember(member.ChannelId, member.UserId); err != nil { - if err.Id == store.MISSING_CHANNEL_MEMBER_ERROR { + if err.Id == app.MISSING_CHANNEL_MEMBER_ERROR { isNewMembership = true } else { c.Err = err @@ -1730,7 +1730,7 @@ func channelMemberCountsByGroup(c *Context, w http.ResponseWriter, r *http.Reque channelMemberCounts, err := c.App.Srv().Store.Channel().GetMemberCountsByGroup(c.Params.ChannelId, includeTimezones) if err != nil { - c.Err = err + c.Err = model.NewAppError("Api4.channelMemberCountsByGroup", "app.channel.get_member_count.app_error", nil, err.Error(), http.StatusInternalServerError) return } diff --git a/app/analytics.go b/app/analytics.go index e8d999c504..93bef3a766 100644 --- a/app/analytics.go +++ b/app/analytics.go @@ -47,12 +47,12 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo privateChan := make(chan store.StoreResult, 1) go func() { count, err2 := a.Srv().Store.Channel().AnalyticsTypeCount(teamId, model.CHANNEL_OPEN) - openChan <- store.StoreResult{Data: count, Err: err2} + openChan <- store.StoreResult{Data: count, NErr: err2} close(openChan) }() go func() { count, err2 := a.Srv().Store.Channel().AnalyticsTypeCount(teamId, model.CHANNEL_PRIVATE) - privateChan <- store.StoreResult{Data: count, Err: err2} + privateChan <- store.StoreResult{Data: count, NErr: err2} close(privateChan) }() @@ -106,14 +106,14 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo }() r := <-openChan - if r.Err != nil { - return nil, r.Err + if r.NErr != nil { + return nil, model.NewAppError("GetAnalytics", "app.channel.analytics_type_count.app_error", nil, r.NErr.Error(), http.StatusInternalServerError) } rows[0].Value = float64(r.Data.(int64)) r = <-privateChan - if r.Err != nil { - return nil, r.Err + if r.NErr != nil { + return nil, model.NewAppError("GetAnalytics", "app.channel.analytics_type_count.app_error", nil, r.NErr.Error(), http.StatusInternalServerError) } rows[1].Value = float64(r.Data.(int64)) diff --git a/app/authorization.go b/app/authorization.go index 7765e6242d..2abf390722 100644 --- a/app/authorization.go +++ b/app/authorization.go @@ -71,8 +71,8 @@ func (a *App) SessionHasPermissionToChannel(session model.Session, channelId str } } - channel, err := a.GetChannel(channelId) - if err != nil && err.StatusCode == http.StatusNotFound { + channel, appErr := a.GetChannel(channelId) + if appErr != nil && appErr.StatusCode == http.StatusNotFound { return false } diff --git a/app/channel.go b/app/channel.go index 8cc5133508..2ffe9c0d7c 100644 --- a/app/channel.go +++ b/app/channel.go @@ -74,6 +74,7 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin } var err *model.AppError + var nErr error for _, channelName := range a.DefaultChannelNames() { channel, channelErr := a.Srv().Store.Channel().GetByName(teamId, channelName, true) if channelErr != nil { @@ -100,7 +101,7 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = a.Srv().Store.Channel().SaveMember(cm) + _, nErr = a.Srv().Store.Channel().SaveMember(cm) if histErr := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(user.Id, channel.Id, model.GetMillis()); histErr != nil { mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(histErr)) return model.NewAppError("JoinDefaultChannels", "app.channel_member_history.log_join_event.internal_error", nil, histErr.Error(), http.StatusInternalServerError) @@ -119,7 +120,22 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin } - return err + if nErr != nil { + var appErr *model.AppError + var cErr *store.ErrConflict + switch { + case errors.As(nErr, &cErr): + if cErr.Resource == "ChannelMembers" { + return model.NewAppError("JoinDefaultChannels", "app.channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) + } + case errors.As(nErr, &appErr): + return appErr + default: + return model.NewAppError("JoinDefaultChannels", "app.channel.create_direct_channel.internal_error", nil, nErr.Error(), http.StatusInternalServerError) + } + } + + return nil } func (a *App) postJoinMessageForDefaultChannel(user *model.User, requestor *model.User, channel *model.Channel) { @@ -254,9 +270,22 @@ func (a *App) CreateChannel(channel *model.Channel, addMember bool) (*model.Chan NotifyProps: model.GetDefaultChannelNotifyProps(), } - if _, err := a.Srv().Store.Channel().SaveMember(cm); err != nil { - return nil, err + if _, nErr := a.Srv().Store.Channel().SaveMember(cm); nErr != nil { + var appErr *model.AppError + var cErr *store.ErrConflict + switch { + case errors.As(nErr, &cErr): + switch cErr.Resource { + case "ChannelMembers": + return nil, model.NewAppError("CreateChannel", "app.channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) + } + case errors.As(nErr, &appErr): + return nil, appErr + default: + return nil, model.NewAppError("CreateChannel", "app.channel.create_direct_channel.internal_error", nil, nErr.Error(), http.StatusInternalServerError) + } } + if err := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(channel.CreatorId, sc.Id, model.GetMillis()); err != nil { mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) return nil, model.NewAppError("CreateChannel", "app.channel_member_history.log_join_event.internal_error", nil, err.Error(), http.StatusInternalServerError) @@ -365,7 +394,7 @@ func (a *App) createDirectChannel(userId string, otherUserId string) (*model.Cha case "Channel": return channel, model.NewAppError("CreateChannel", store.CHANNEL_EXISTS_ERROR, nil, cErr.Error(), http.StatusBadRequest) case "ChannelMembers": - return nil, model.NewAppError("CreateChannel", "store.sql_channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) + return nil, model.NewAppError("CreateChannel", "app.channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) } case errors.As(nErr, <Err): return nil, model.NewAppError("CreateChannel", "store.sql_channel.save_channel.limit.app_error", nil, ltErr.Error(), http.StatusBadRequest) @@ -409,7 +438,8 @@ func (a *App) WaitForChannelMembership(channelId string, userId string) { } // If we received an error, but it wasn't a missing channel member then return - if err.Id != store.MISSING_CHANNEL_MEMBER_ERROR { + var nfErr *store.ErrNotFound + if !errors.As(err, &nfErr) { return } } @@ -497,8 +527,20 @@ func (a *App) createGroupChannel(userIds []string, creatorId string) (*model.Cha SchemeUser: !user.IsGuest(), } - if _, err := a.Srv().Store.Channel().SaveMember(cm); err != nil { - return nil, err + if _, nErr = a.Srv().Store.Channel().SaveMember(cm); nErr != nil { + var appErr *model.AppError + var cErr *store.ErrConflict + switch { + case errors.As(nErr, &cErr): + switch cErr.Resource { + case "ChannelMembers": + return nil, model.NewAppError("createGroupChannel", "app.channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) + } + case errors.As(nErr, &appErr): + return nil, appErr + default: + return nil, model.NewAppError("createGroupChannel", "app.channel.create_direct_channel.internal_error", nil, nErr.Error(), http.StatusInternalServerError) + } } if err := a.Srv().Store.ChannelMemberHistory().LogJoinEvent(user.Id, channel.Id, model.GetMillis()); err != nil { mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) @@ -1038,9 +1080,18 @@ func (a *App) UpdateChannelMemberRoles(channelId string, userId string, newRoles member.ExplicitRoles = strings.Join(newExplicitRoles, " ") - member, err = a.Srv().Store.Channel().UpdateMember(member) - if err != nil { - return nil, err + member, nErr := a.Srv().Store.Channel().UpdateMember(member) + if nErr != nil { + var appErr *model.AppError + var nfErr *store.ErrNotFound + switch { + case errors.As(nErr, &appErr): + return nil, appErr + case errors.As(nErr, &nfErr): + return nil, model.NewAppError("UpdateChannelMemberRoles", MISSING_CHANNEL_MEMBER_ERROR, nil, nfErr.Error(), http.StatusNotFound) + default: + return nil, model.NewAppError("UpdateChannelMemberRoles", "app.channel.get_member.app_error", nil, nErr.Error(), http.StatusInternalServerError) + } } a.InvalidateCacheForUser(userId) @@ -1066,9 +1117,18 @@ func (a *App) UpdateChannelMemberSchemeRoles(channelId string, userId string, is member.ExplicitRoles = RemoveRoles([]string{model.CHANNEL_GUEST_ROLE_ID, model.CHANNEL_USER_ROLE_ID, model.CHANNEL_ADMIN_ROLE_ID}, member.ExplicitRoles) } - member, err = a.Srv().Store.Channel().UpdateMember(member) - if err != nil { - return nil, err + member, nErr := a.Srv().Store.Channel().UpdateMember(member) + if nErr != nil { + var appErr *model.AppError + var nfErr *store.ErrNotFound + switch { + case errors.As(nErr, &appErr): + return nil, appErr + case errors.As(nErr, &nfErr): + return nil, model.NewAppError("UpdateChannelMemberSchemeRoles", MISSING_CHANNEL_MEMBER_ERROR, nil, nfErr.Error(), http.StatusNotFound) + default: + return nil, model.NewAppError("UpdateChannelMemberSchemeRoles", "app.channel.get_member.app_error", nil, nErr.Error(), http.StatusInternalServerError) + } } // Notify the clients that the member notify props changed @@ -1108,9 +1168,18 @@ func (a *App) UpdateChannelMemberNotifyProps(data map[string]string, channelId s member.NotifyProps[model.IGNORE_CHANNEL_MENTIONS_NOTIFY_PROP] = ignoreChannelMentions } - member, err = a.Srv().Store.Channel().UpdateMember(member) - if err != nil { - return nil, err + member, nErr := a.Srv().Store.Channel().UpdateMember(member) + if nErr != nil { + var appErr *model.AppError + var nfErr *store.ErrNotFound + switch { + case errors.As(nErr, &appErr): + return nil, appErr + case errors.As(nErr, &nfErr): + return nil, model.NewAppError("UpdateChannelMemberNotifyProps", MISSING_CHANNEL_MEMBER_ERROR, nil, nfErr.Error(), http.StatusNotFound) + default: + return nil, model.NewAppError("UpdateChannelMemberNotifyProps", "app.channel.get_member.app_error", nil, nErr.Error(), http.StatusInternalServerError) + } } a.InvalidateCacheForUser(userId) @@ -1222,10 +1291,11 @@ func (a *App) addUserToChannel(user *model.User, channel *model.Channel, teamMem return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest) } - channelMember, err := a.Srv().Store.Channel().GetMember(channel.Id, user.Id) - if err != nil { - if err.Id != store.MISSING_CHANNEL_MEMBER_ERROR { - return nil, err + channelMember, nErr := a.Srv().Store.Channel().GetMember(channel.Id, user.Id) + if nErr != nil { + var nfErr *store.ErrNotFound + if !errors.As(nErr, &nfErr) { + return nil, model.NewAppError("AddUserToChannel", "app.channel.get_member.app_error", nil, nErr.Error(), http.StatusInternalServerError) } } else { return channelMember, nil @@ -1251,16 +1321,16 @@ func (a *App) addUserToChannel(user *model.User, channel *model.Channel, teamMem if !user.IsGuest() { var userShouldBeAdmin bool - userShouldBeAdmin, err = a.UserIsInAdminRoleGroup(user.Id, channel.Id, model.GroupSyncableTypeChannel) - if err != nil { - return nil, err + userShouldBeAdmin, appErr := a.UserIsInAdminRoleGroup(user.Id, channel.Id, model.GroupSyncableTypeChannel) + if appErr != nil { + return nil, appErr } newMember.SchemeAdmin = userShouldBeAdmin } - newMember, err = a.Srv().Store.Channel().SaveMember(newMember) - if err != nil { - mlog.Error("Failed to add member", mlog.String("user_id", user.Id), mlog.String("channel_id", channel.Id), mlog.Err(err)) + newMember, nErr = a.Srv().Store.Channel().SaveMember(newMember) + if nErr != nil { + mlog.Error("Failed to add member", mlog.String("user_id", user.Id), mlog.String("channel_id", channel.Id), mlog.Err(nErr)) return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user.to.channel.failed.app_error", nil, "", http.StatusInternalServerError) } a.WaitForChannelMembership(channel.Id, user.Id) @@ -1301,8 +1371,9 @@ func (a *App) AddUserToChannel(user *model.User, channel *model.Channel) (*model func (a *App) AddChannelMember(userId string, channel *model.Channel, userRequestorId string, postRootId string) (*model.ChannelMember, *model.AppError) { if member, err := a.Srv().Store.Channel().GetMember(channel.Id, userId); err != nil { - if err.Id != store.MISSING_CHANNEL_MEMBER_ERROR { - return nil, err + var nfErr *store.ErrNotFound + if !errors.As(err, &nfErr) { + return nil, model.NewAppError("AddChannelMember", "app.channel.get_member.app_error", nil, err.Error(), http.StatusInternalServerError) } } else { return member, nil @@ -1665,17 +1736,33 @@ func (a *App) GetPrivateChannelsForTeam(teamId string, offset int, limit int) (* } func (a *App) GetChannelMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { - return a.Srv().Store.Channel().GetMember(channelId, userId) + channelMember, err := a.Srv().Store.Channel().GetMember(channelId, userId) + if err != nil { + var nfErr *store.ErrNotFound + switch { + case errors.As(err, &nfErr): + return nil, model.NewAppError("GetChannelMember", MISSING_CHANNEL_MEMBER_ERROR, nil, nfErr.Error(), http.StatusNotFound) + default: + return nil, model.NewAppError("GetChannelMember", "app.channel.get_member.app_error", nil, err.Error(), http.StatusInternalServerError) + } + } + + return channelMember, nil } func (a *App) GetChannelMembersPage(channelId string, page, perPage int) (*model.ChannelMembers, *model.AppError) { - return a.Srv().Store.Channel().GetMembers(channelId, page*perPage, perPage) + channelMembers, err := a.Srv().Store.Channel().GetMembers(channelId, page*perPage, perPage) + if err != nil { + return nil, model.NewAppError("GetChannelMembersPage", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + return channelMembers, nil } func (a *App) GetChannelMembersTimezones(channelId string) ([]string, *model.AppError) { membersTimezones, err := a.Srv().Store.Channel().GetChannelMembersTimezones(channelId) if err != nil { - return nil, err + return nil, model.NewAppError("GetChannelMembersTimezones", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError) } var timezones []string @@ -1694,13 +1781,18 @@ func (a *App) GetChannelMembersByIds(channelId string, userIds []string) (*model } func (a *App) GetChannelMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { - return a.Srv().Store.Channel().GetMembersForUser(teamId, userId) + channelMembers, err := a.Srv().Store.Channel().GetMembersForUser(teamId, userId) + if err != nil { + return nil, model.NewAppError("GetChannelMembersForUser", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + return channelMembers, nil } func (a *App) GetChannelMembersForUserWithPagination(teamId, userId string, page, perPage int) ([]*model.ChannelMember, *model.AppError) { m, err := a.Srv().Store.Channel().GetMembersForUserWithPagination(teamId, userId, page, perPage) if err != nil { - return nil, err + return nil, model.NewAppError("GetChannelMembersForUserWithPagination", "app.channel.get_members.app_error", nil, err.Error(), http.StatusInternalServerError) } members := make([]*model.ChannelMember, 0) @@ -1714,15 +1806,30 @@ func (a *App) GetChannelMembersForUserWithPagination(teamId, userId string, page } func (a *App) GetChannelMemberCount(channelId string) (int64, *model.AppError) { - return a.Srv().Store.Channel().GetMemberCount(channelId, true) + count, err := a.Srv().Store.Channel().GetMemberCount(channelId, true) + if err != nil { + return 0, model.NewAppError("GetChannelMemberCount", "app.channel.get_member_count.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + return count, nil } func (a *App) GetChannelGuestCount(channelId string) (int64, *model.AppError) { - return a.Srv().Store.Channel().GetGuestCount(channelId, true) + count, err := a.Srv().Store.Channel().GetGuestCount(channelId, true) + if err != nil { + return 0, model.NewAppError("SqlChannelStore.GetGuestCount", "app.channel.get_member_count.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + return count, nil } func (a *App) GetChannelPinnedPostCount(channelId string) (int64, *model.AppError) { - return a.Srv().Store.Channel().GetPinnedPostCount(channelId, true) + count, err := a.Srv().Store.Channel().GetPinnedPostCount(channelId, true) + if err != nil { + return 0, model.NewAppError("GetChannelPinnedPostCount", "app.channel.get_pinnedpost_count.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + return count, nil } func (a *App) GetChannelCounts(teamId string, userId string) (*model.ChannelCounts, *model.AppError) { @@ -1757,7 +1864,7 @@ func (a *App) JoinChannel(channel *model.Channel, userId string) *model.AppError }() go func() { member, err := a.Srv().Store.Channel().GetMember(channel.Id, userId) - memberChan <- store.StoreResult{Data: member, Err: err} + memberChan <- store.StoreResult{Data: member, NErr: err} close(memberChan) }() @@ -1767,7 +1874,7 @@ func (a *App) JoinChannel(channel *model.Channel, userId string) *model.AppError } mresult := <-memberChan - if mresult.Err == nil && mresult.Data != nil { + if mresult.NErr == nil && mresult.Data != nil { // user is already in the channel return nil } @@ -1862,7 +1969,7 @@ func (a *App) LeaveChannel(channelId string, userId string) *model.AppError { mcc := make(chan store.StoreResult, 1) go func() { count, err := a.Srv().Store.Channel().GetMemberCount(channelId, false) - mcc <- store.StoreResult{Data: count, Err: err} + mcc <- store.StoreResult{Data: count, NErr: err} close(mcc) }() @@ -1881,8 +1988,8 @@ func (a *App) LeaveChannel(channelId string, userId string) *model.AppError { } } ccresult := <-mcc - if ccresult.Err != nil { - return ccresult.Err + if ccresult.NErr != nil { + return model.NewAppError("LeaveChannel", "app.channel.get_member_count.app_error", nil, ccresult.NErr.Error(), http.StatusInternalServerError) } channel := cresult.Data.(*model.Channel) @@ -2038,7 +2145,7 @@ func (a *App) removeUserFromChannel(userIdToRemove string, removerUserId string, } if err := a.Srv().Store.Channel().RemoveMember(channel.Id, userIdToRemove); err != nil { - return err + return model.NewAppError("removeUserFromChannel", "app.channel.remove_member.app_error", nil, err.Error(), http.StatusInternalServerError) } if err := a.Srv().Store.ChannelMemberHistory().LogLeaveEvent(userIdToRemove, channel.Id, model.GetMillis()); err != nil { return model.NewAppError("removeUserFromChannel", "app.channel_member_history.log_leave_event.internal_error", nil, err.Error(), http.StatusInternalServerError) @@ -2158,7 +2265,13 @@ func (a *App) SetActiveChannel(userId string, channelId string) *model.AppError func (a *App) UpdateChannelLastViewedAt(channelIds []string, userId string) *model.AppError { if _, err := a.Srv().Store.Channel().UpdateLastViewedAt(channelIds, userId); err != nil { - return err + var invErr *store.ErrInvalidInput + switch { + case errors.As(err, &invErr): + return model.NewAppError("UpdateChannelLastViewedAt", "app.channel.update_last_viewed_at.app_error", nil, invErr.Error(), http.StatusBadRequest) + default: + return model.NewAppError("UpdateChannelLastViewedAt", "app.channel.update_last_viewed_at.app_error", nil, err.Error(), http.StatusInternalServerError) + } } if *a.Config().ServiceSettings.EnableChannelViewedMessages { @@ -2189,9 +2302,9 @@ func (a *App) MarkChannelAsUnreadFromPost(postID string, userID string) (*model. return nil, err } - channelUnread, updateErr := a.Srv().Store.Channel().UpdateLastViewedAtPost(post, userID, unreadMentions) - if updateErr != nil { - return channelUnread, updateErr + channelUnread, nErr := a.Srv().Store.Channel().UpdateLastViewedAtPost(post, userID, unreadMentions) + if nErr != nil { + return channelUnread, model.NewAppError("MarkChannelAsUnreadFromPost", "app.channel.update_last_viewed_at_post.app_error", nil, nErr.Error(), http.StatusInternalServerError) } message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_UNREAD, channelUnread.TeamId, channelUnread.ChannelId, channelUnread.UserId, nil) @@ -2327,7 +2440,13 @@ func (a *App) MarkChannelsAsViewed(channelIds []string, userId string, currentSe } times, err := a.Srv().Store.Channel().UpdateLastViewedAt(channelIds, userId) if err != nil { - return nil, err + var invErr *store.ErrInvalidInput + switch { + case errors.As(err, &invErr): + return nil, model.NewAppError("MarkChannelsAsViewed", "app.channel.update_last_viewed_at.app_error", nil, invErr.Error(), http.StatusBadRequest) + default: + return nil, model.NewAppError("MarkChannelsAsViewed", "app.channel.update_last_viewed_at.app_error", nil, err.Error(), http.StatusInternalServerError) + } } if *a.Config().ServiceSettings.EnableChannelViewedMessages { @@ -2371,7 +2490,7 @@ func (a *App) PermanentDeleteChannel(channel *model.Channel) *model.AppError { } if err := a.Srv().Store.Channel().PermanentDeleteMembersByChannel(channel.Id); err != nil { - return err + return model.NewAppError("PermanentDeleteChannel", "app.channel.remove_member.app_error", nil, err.Error(), http.StatusInternalServerError) } if err := a.Srv().Store.Webhook().PermanentDeleteIncomingByChannel(channel.Id); err != nil { @@ -2563,7 +2682,12 @@ func (a *App) RemoveUsersFromChannelNotMemberOfTeam(remover *model.User, channel } func (a *App) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) { - return a.Srv().Store.Channel().GetPinnedPosts(channelId) + posts, err := a.Srv().Store.Channel().GetPinnedPosts(channelId) + if err != nil { + return nil, model.NewAppError("GetPinnedPosts", "app.channel.pinned_posts.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + return posts, nil } func (a *App) ToggleMuteChannel(channelId string, userId string) *model.ChannelMember { diff --git a/app/constants.go b/app/constants.go new file mode 100644 index 0000000000..4936c30909 --- /dev/null +++ b/app/constants.go @@ -0,0 +1,6 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package app + +const MISSING_CHANNEL_MEMBER_ERROR = "app.channel.get_member.missing.app_error" diff --git a/app/import_functions.go b/app/import_functions.go index 470c29bb6c..d5b4461a17 100644 --- a/app/import_functions.go +++ b/app/import_functions.go @@ -822,9 +822,9 @@ func (a *App) importUserChannels(user *model.User, team *model.Team, teamMember isGuestByChannelId := map[string]bool{} isUserByChannelId := map[string]bool{} isAdminByChannelId := map[string]bool{} - existingMemberships, err := a.Srv().Store.Channel().GetMembersForUser(team.Id, user.Id) - if err != nil { - return err + existingMemberships, nErr := a.Srv().Store.Channel().GetMembersForUser(team.Id, user.Id) + if nErr != nil { + return model.NewAppError("importUserChannels", "app.channel.get_members.app_error", nil, nErr.Error(), http.StatusInternalServerError) } existingMembershipsByChannelId := map[string]model.ChannelMember{} for _, channelMembership := range *existingMemberships { @@ -913,16 +913,37 @@ func (a *App) importUserChannels(user *model.User, team *model.Team, teamMember } } - oldMembers, err := a.Srv().Store.Channel().UpdateMultipleMembers(oldChannelMembers) - if err != nil { - return err + oldMembers, nErr := a.Srv().Store.Channel().UpdateMultipleMembers(oldChannelMembers) + if nErr != nil { + var nfErr *store.ErrNotFound + var appErr *model.AppError + switch { + case errors.As(nErr, &appErr): + return appErr + case errors.As(nErr, &nfErr): + return model.NewAppError("importUserChannels", MISSING_CHANNEL_MEMBER_ERROR, nil, nfErr.Error(), http.StatusNotFound) + default: + return model.NewAppError("importUserChannels", "app.channel.get_member.app_error", nil, nErr.Error(), http.StatusInternalServerError) + } } newMembers := []*model.ChannelMember{} if len(newChannelMembers) > 0 { - newMembers, err = a.Srv().Store.Channel().SaveMultipleMembers(newChannelMembers) - if err != nil { - return err + newMembers, nErr = a.Srv().Store.Channel().SaveMultipleMembers(newChannelMembers) + if nErr != nil { + var cErr *store.ErrConflict + var appErr *model.AppError + switch { + case errors.As(nErr, &cErr): + switch cErr.Resource { + case "ChannelMembers": + return model.NewAppError("importUserChannels", "app.channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) + } + case errors.As(nErr, &appErr): + return appErr + default: + return model.NewAppError("importUserChannels", "app.channel.create_direct_channel.internal_error", nil, nErr.Error(), http.StatusInternalServerError) + } } } diff --git a/app/import_functions_test.go b/app/import_functions_test.go index 3f8a7c7f8a..fff1a762bf 100644 --- a/app/import_functions_test.go +++ b/app/import_functions_test.go @@ -604,8 +604,8 @@ func TestImportImportChannel(t *testing.T) { require.Nil(t, err, "Failed to get team from database.") // Check how many channels are in the database. - channelCount, err := th.App.Srv().Store.Channel().AnalyticsTypeCount("", model.CHANNEL_OPEN) - require.Nil(t, err, "Failed to get team count.") + channelCount, nErr := th.App.Srv().Store.Channel().AnalyticsTypeCount("", model.CHANNEL_OPEN) + require.Nil(t, nErr, "Failed to get team count.") // Do an invalid channel in dry-run mode. data := ChannelImportData{ @@ -3043,8 +3043,8 @@ func TestImportImportDirectChannel(t *testing.T) { th.BasicUser2.Id, user3.Id, } - channel, err = th.App.createGroupChannel(userIds, th.BasicUser.Id) - require.Equal(t, err.Id, store.CHANNEL_EXISTS_ERROR) + channel, appErr := th.App.createGroupChannel(userIds, th.BasicUser.Id) + require.Equal(t, appErr.Id, store.CHANNEL_EXISTS_ERROR) require.Equal(t, channel.Header, *data.Header) // Import a channel with some favorites. diff --git a/app/notification.go b/app/notification.go index 22b0050aa5..e0bfab9b83 100644 --- a/app/notification.go +++ b/app/notification.go @@ -4,6 +4,7 @@ package app import ( + "net/http" "sort" "strings" "unicode" @@ -32,7 +33,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod cmnchan := make(chan store.StoreResult, 1) go func() { props, err := a.Srv().Store.Channel().GetAllChannelMembersNotifyPropsForChannel(channel.Id, true) - cmnchan <- store.StoreResult{Data: props, Err: err} + cmnchan <- store.StoreResult{Data: props, NErr: err} close(cmnchan) }() @@ -63,8 +64,8 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod profileMap := result.Data.(map[string]*model.User) result = <-cmnchan - if result.Err != nil { - return nil, result.Err + if result.NErr != nil { + return nil, result.NErr } channelMemberNotifyPropsMap := result.Data.(map[string]model.StringMap) @@ -164,7 +165,13 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod umc := make(chan *model.AppError, 1) go func(userId string) { - umc <- a.Srv().Store.Channel().IncrementMentionCount(post.ChannelId, userId) + nErr := a.Srv().Store.Channel().IncrementMentionCount(post.ChannelId, userId) + if nErr != nil { + umc <- model.NewAppError("SendNotifications", "app.channel.increment_mention_count.app_error", nil, nErr.Error(), http.StatusInternalServerError) + } else { + umc <- nil + } + close(umc) }(id) updateMentionChans = append(updateMentionChans, umc) diff --git a/app/post.go b/app/post.go index 2840f6c946..930879d720 100644 --- a/app/post.go +++ b/app/post.go @@ -1292,12 +1292,12 @@ func (a *App) countMentionsFromPost(user *model.User, post *model.Post) (int, *m if channel.Type == model.CHANNEL_DIRECT { // In a DM channel, every post made by the other user is a mention - count, countErr := a.Srv().Store.Channel().CountPostsAfter(post.ChannelId, post.CreateAt-1, channel.GetOtherUserIdForDM(user.Id)) - if countErr != nil { - return 0, countErr + count, nErr := a.Srv().Store.Channel().CountPostsAfter(post.ChannelId, post.CreateAt-1, channel.GetOtherUserIdForDM(user.Id)) + if nErr != nil { + return 0, model.NewAppError("countMentionsFromPost", "app.channel.count_posts_since.app_error", nil, nErr.Error(), http.StatusInternalServerError) } - return count, countErr + return count, nil } channelMember, err := a.GetChannelMember(channel.Id, user.Id) diff --git a/app/post_test.go b/app/post_test.go index 26fe87d83b..b344e574cc 100644 --- a/app/post_test.go +++ b/app/post_test.go @@ -893,15 +893,15 @@ func TestCreatePostAsUser(t *testing.T) { UserId: bot.UserId, } - channelMemberBefore, appErr := th.App.Srv().Store.Channel().GetMember(th.BasicChannel.Id, th.BasicUser.Id) - require.Nil(t, appErr) + channelMemberBefore, nErr := th.App.Srv().Store.Channel().GetMember(th.BasicChannel.Id, th.BasicUser.Id) + require.Nil(t, nErr) time.Sleep(1 * time.Millisecond) _, appErr = th.App.CreatePostAsUser(post, "", true) require.Nil(t, appErr) - channelMemberAfter, appErr := th.App.Srv().Store.Channel().GetMember(th.BasicChannel.Id, th.BasicUser.Id) - require.Nil(t, appErr) + channelMemberAfter, nErr := th.App.Srv().Store.Channel().GetMember(th.BasicChannel.Id, th.BasicUser.Id) + require.Nil(t, nErr) require.Equal(t, channelMemberAfter.LastViewedAt, channelMemberBefore.LastViewedAt) }) diff --git a/app/slashcommands/command_leave_test.go b/app/slashcommands/command_leave_test.go index b7ec1f0d94..78c0976394 100644 --- a/app/slashcommands/command_leave_test.go +++ b/app/slashcommands/command_leave_test.go @@ -82,7 +82,7 @@ func TestLeaveProviderDoCommand(t *testing.T) { _, err = th.App.GetChannelMember(publicChannel.Id, th.BasicUser.Id) assert.NotNil(t, err) - assert.NotNil(t, err.Id, "store.sql_channel.get_member.missing.app_error") + assert.NotNil(t, err.Id, "app.channel.get_member.missing.app_error") }) t.Run("Leave a private channel", func(t *testing.T) { @@ -124,7 +124,7 @@ func TestLeaveProviderDoCommand(t *testing.T) { _, err = th.App.GetChannelMember(defaultChannel.Id, guest.Id) assert.NotNil(t, err) - assert.NotNil(t, err.Id, "store.sql_channel.get_member.missing.app_error") + assert.NotNil(t, err.Id, "app.channel.get_member.missing.app_error") }) t.Run("Should redirect to the team if is the last channel", func(t *testing.T) { @@ -142,6 +142,6 @@ func TestLeaveProviderDoCommand(t *testing.T) { _, err = th.App.GetChannelMember(publicChannel.Id, guest.Id) assert.NotNil(t, err) - assert.NotNil(t, err.Id, "store.sql_channel.get_member.missing.app_error") + assert.NotNil(t, err.Id, "app.channel.get_member.missing.app_error") }) } diff --git a/app/syncables_test.go b/app/syncables_test.go index 56f48024cb..0e68c23e6c 100644 --- a/app/syncables_test.go +++ b/app/syncables_test.go @@ -142,7 +142,7 @@ func TestCreateDefaultMemberships(t *testing.T) { } _, err = th.App.GetChannelMember(experimentsChannel.Id, scientist1.Id) - if err.Id != "store.sql_channel.get_member.missing.app_error" { + if err.Id != "app.channel.get_member.missing.app_error" { t.Errorf("wrong error: %s", err.Id) } @@ -184,7 +184,7 @@ func TestCreateDefaultMemberships(t *testing.T) { } _, err = th.App.GetChannelMember(experimentsChannel.Id, scientist1.Id) - if err.Id != "store.sql_channel.get_member.missing.app_error" { + if err.Id != "app.channel.get_member.missing.app_error" { t.Errorf("wrong error: %s", err.Id) } diff --git a/app/team.go b/app/team.go index b5c1c3020f..617eafee95 100644 --- a/app/team.go +++ b/app/team.go @@ -1194,8 +1194,8 @@ func (a *App) LeaveTeam(team *model.Team, user *model.User, requestorId string) for _, channel := range *channelList { if !channel.IsGroupOrDirect() { a.invalidateCacheForChannelMembers(channel.Id) - if err = a.Srv().Store.Channel().RemoveMember(channel.Id, user.Id); err != nil { - return err + if nErr = a.Srv().Store.Channel().RemoveMember(channel.Id, user.Id); nErr != nil { + return model.NewAppError("LeaveTeam", "app.channel.remove_member.app_error", nil, nErr.Error(), http.StatusInternalServerError) } } } diff --git a/app/user.go b/app/user.go index 0ea3ef37fd..761310b9d7 100644 --- a/app/user.go +++ b/app/user.go @@ -1514,7 +1514,7 @@ func (a *App) PermanentDeleteUser(user *model.User) *model.AppError { } if err := a.Srv().Store.Channel().PermanentDeleteMembersByUser(user.Id); err != nil { - return err + return model.NewAppError("PermanentDeleteUser", "app.channel.permanent_delete_members_by_user.app_error", nil, err.Error(), http.StatusInternalServerError) } if err := a.Srv().Store.Group().PermanentDeleteMembersByUser(user.Id); err != nil { @@ -2028,7 +2028,7 @@ func (a *App) GetViewUsersRestrictions(userId string) (*model.ViewUsersRestricti userChannelMembers, err := a.Srv().Store.Channel().GetAllChannelMembersForUser(userId, true, true) if err != nil { - return nil, err + return nil, model.NewAppError("GetViewUsersRestrictions", "app.channel.get_channels.get.app_error", nil, err.Error(), http.StatusInternalServerError) } channelIds := []string{} diff --git a/i18n/en.json b/i18n/en.json index 70b7399449..b5ecd67969 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -3262,6 +3262,14 @@ "id": "app.bot.permenent_delete.bad_id", "translation": "Unable to delete the bot." }, + { + "id": "app.channel.analytics_type_count.app_error", + "translation": "Unable to get channel type counts." + }, + { + "id": "app.channel.count_posts_since.app_error", + "translation": "Unable to count messages since given date." + }, { "id": "app.channel.create_channel.internal_error", "translation": "Unable to save channel." @@ -3342,10 +3350,30 @@ "id": "app.channel.get_for_post.app_error", "translation": "Unable to get the channel for the given post." }, + { + "id": "app.channel.get_member.app_error", + "translation": "Unable to get the channel member." + }, + { + "id": "app.channel.get_member.missing.app_error", + "translation": "No channel member found for that user ID and channel ID." + }, + { + "id": "app.channel.get_member_count.app_error", + "translation": "Unable to get the channel member count." + }, + { + "id": "app.channel.get_members.app_error", + "translation": "Unable to get the channel members." + }, { "id": "app.channel.get_more_channels.get.app_error", "translation": "Unable to get the channels." }, + { + "id": "app.channel.get_pinnedpost_count.app_error", + "translation": "Unable to get the channel pinned post count." + }, { "id": "app.channel.get_private_channels.get.app_error", "translation": "Unable to get private channels." @@ -3354,6 +3382,10 @@ "id": "app.channel.get_public_channels.get.app_error", "translation": "Unable to get public channels." }, + { + "id": "app.channel.increment_mention_count.app_error", + "translation": "Unable to increment the mention count." + }, { "id": "app.channel.move_channel.members_do_not_match.error", "translation": "Unable to move a channel unless all its members are already members of the destination team." @@ -3362,6 +3394,14 @@ "id": "app.channel.permanent_delete.app_error", "translation": "Unable to delete the channel." }, + { + "id": "app.channel.permanent_delete_members_by_user.app_error", + "translation": "Unable to remove the channel member." + }, + { + "id": "app.channel.pinned_posts.app_error", + "translation": "Unable to find the pinned posts." + }, { "id": "app.channel.post_update_channel_purpose_message.post.error", "translation": "Failed to post channel purpose message" @@ -3382,10 +3422,18 @@ "id": "app.channel.post_update_channel_purpose_message.updated_to", "translation": "%s updated the channel purpose to: %s" }, + { + "id": "app.channel.remove_member.app_error", + "translation": "Unable to remove the channel member." + }, { "id": "app.channel.restore.app_error", "translation": "Unable to restore the channel." }, + { + "id": "app.channel.save_member.exists.app_error", + "translation": "" + }, { "id": "app.channel.sidebar_categories.app_error", "translation": "Failed to insert record to database." @@ -3398,6 +3446,14 @@ "id": "app.channel.update_channel.internal_error", "translation": "Unable to update channel." }, + { + "id": "app.channel.update_last_viewed_at.app_error", + "translation": "Unable to update the last viewed at time." + }, + { + "id": "app.channel.update_last_viewed_at_post.app_error", + "translation": "Unable to mark channel as unread." + }, { "id": "app.channel_member_history.log_join_event.internal_error", "translation": "Failed to record channel member history." @@ -7234,10 +7290,6 @@ "id": "store.sql_channel.analytics_deleted_type_count.app_error", "translation": "Unable to get deleted channel type counts." }, - { - "id": "store.sql_channel.analytics_type_count.app_error", - "translation": "Unable to get channel type counts." - }, { "id": "store.sql_channel.clear_all_custom_role_assignments.commit_transaction.app_error", "translation": "Failed to commit the database transaction." @@ -7254,10 +7306,6 @@ "id": "store.sql_channel.clear_all_custom_role_assignments.update.app_error", "translation": "Failed to update the channel member." }, - { - "id": "store.sql_channel.count_posts_since.app_error", - "translation": "Unable to count messages since given date." - }, { "id": "store.sql_channel.get.existing.app_error", "translation": "Unable to find the existing channel." @@ -7282,42 +7330,14 @@ "id": "store.sql_channel.get_channels_batch_for_indexing.get.app_error", "translation": "Unable to get the channels batch for indexing." }, - { - "id": "store.sql_channel.get_member.app_error", - "translation": "Unable to get the channel member." - }, - { - "id": "store.sql_channel.get_member.missing.app_error", - "translation": "No channel member found for that user ID and channel ID." - }, - { - "id": "store.sql_channel.get_member_count.app_error", - "translation": "Unable to get the channel member count." - }, - { - "id": "store.sql_channel.get_member_for_post.app_error", - "translation": "Unable to get the channel member for the given post." - }, - { - "id": "store.sql_channel.get_members.app_error", - "translation": "Unable to get the channel members." - }, { "id": "store.sql_channel.get_members_by_ids.app_error", "translation": "Unable to get the channel members." }, - { - "id": "store.sql_channel.get_pinnedpost_count.app_error", - "translation": "Unable to get the channel pinned post count." - }, { "id": "store.sql_channel.get_unread.app_error", "translation": "Unable to get the channel unread messages." }, - { - "id": "store.sql_channel.increment_mention_count.app_error", - "translation": "Unable to increment the mention count." - }, { "id": "store.sql_channel.migrate_channel_members.commit_transaction.app_error", "translation": "Failed to commit the database transaction." @@ -7334,22 +7354,10 @@ "id": "store.sql_channel.migrate_channel_members.update.app_error", "translation": "Failed to update the channel member." }, - { - "id": "store.sql_channel.permanent_delete_members_by_user.app_error", - "translation": "Unable to remove the channel member." - }, - { - "id": "store.sql_channel.pinned_posts.app_error", - "translation": "Unable to find the pinned posts." - }, { "id": "store.sql_channel.remove_all_deactivated_members.app_error", "translation": "We could not remove the deactivated users from the channel." }, - { - "id": "store.sql_channel.remove_member.app_error", - "translation": "Unable to remove the channel member." - }, { "id": "store.sql_channel.reset_all_channel_schemes.app_error", "translation": "We could not reset the channel schemes." @@ -7386,18 +7394,6 @@ "id": "store.sql_channel.save_direct_channel.not_direct.app_error", "translation": "Not a direct channel attempted to be created with SaveDirectChannel." }, - { - "id": "store.sql_channel.save_member.commit_transaction.app_error", - "translation": "Unable to commit transaction." - }, - { - "id": "store.sql_channel.save_member.exists.app_error", - "translation": "A channel member with that ID already exists." - }, - { - "id": "store.sql_channel.save_member.open_transaction.app_error", - "translation": "Unable to open transaction." - }, { "id": "store.sql_channel.search.app_error", "translation": "We encountered an error searching channels." @@ -7422,18 +7418,6 @@ "id": "store.sql_channel.sidebar_categories.open_transaction.app_error", "translation": "Failed to open the database transaction." }, - { - "id": "store.sql_channel.update_last_viewed_at.app_error", - "translation": "Unable to update the last viewed at time." - }, - { - "id": "store.sql_channel.update_last_viewed_at_post.app_error", - "translation": "Unable to mark channel as unread." - }, - { - "id": "store.sql_channel.update_member.app_error", - "translation": "We encountered an error updating the channel member." - }, { "id": "store.sql_channel.user_belongs_to_channels.app_error", "translation": "Unable to determine if the user belongs to a list of channels." diff --git a/store/constants.go b/store/constants.go index a4ff445303..24a21a93ae 100644 --- a/store/constants.go +++ b/store/constants.go @@ -4,8 +4,7 @@ package store const ( - MISSING_CHANNEL_MEMBER_ERROR = "store.sql_channel.get_member.missing.app_error" - CHANNEL_EXISTS_ERROR = "store.sql_channel.save_channel.exists.app_error" + CHANNEL_EXISTS_ERROR = "store.sql_channel.save_channel.exists.app_error" MISSING_ACCOUNT_ERROR = "store.sql_user.missing_account.const" MISSING_AUTH_ACCOUNT_ERROR = "store.sql_user.get_by_auth.missing_account.app_error" diff --git a/store/localcachelayer/channel_layer.go b/store/localcachelayer/channel_layer.go index 3e7a505033..efa9e6de1a 100644 --- a/store/localcachelayer/channel_layer.go +++ b/store/localcachelayer/channel_layer.go @@ -87,7 +87,7 @@ func (s LocalCacheChannelStore) InvalidateChannel(channelId string) { } } -func (s LocalCacheChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s LocalCacheChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { if allowFromCache { var count int64 if err := s.rootStore.doStandardReadCache(s.rootStore.channelMemberCountsCache, channelId, &count); err == nil { @@ -103,7 +103,7 @@ func (s LocalCacheChannelStore) GetMemberCount(channelId string, allowFromCache return count, err } -func (s LocalCacheChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s LocalCacheChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { if allowFromCache { var count int64 if err := s.rootStore.doStandardReadCache(s.rootStore.channelGuestCountCache, channelId, &count); err == nil { @@ -133,7 +133,7 @@ func (s LocalCacheChannelStore) GetMemberCountFromCache(channelId string) int64 return count } -func (s LocalCacheChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s LocalCacheChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { if allowFromCache { var count int64 if err := s.rootStore.doStandardReadCache(s.rootStore.channelPinnedPostCountsCache, channelId, &count); err == nil { @@ -172,7 +172,7 @@ func (s LocalCacheChannelStore) Get(id string, allowFromCache bool) (*model.Chan return ch, err } -func (s LocalCacheChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s LocalCacheChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) { member, err := s.ChannelStore.SaveMember(member) if err != nil { return nil, err @@ -181,7 +181,7 @@ func (s LocalCacheChannelStore) SaveMember(member *model.ChannelMember) (*model. return member, nil } -func (s LocalCacheChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s LocalCacheChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { members, err := s.ChannelStore.SaveMultipleMembers(members) if err != nil { return nil, err @@ -192,7 +192,7 @@ func (s LocalCacheChannelStore) SaveMultipleMembers(members []*model.ChannelMemb return members, nil } -func (s LocalCacheChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s LocalCacheChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) { member, err := s.ChannelStore.UpdateMember(member) if err != nil { return nil, err @@ -201,7 +201,7 @@ func (s LocalCacheChannelStore) UpdateMember(member *model.ChannelMember) (*mode return member, nil } -func (s LocalCacheChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s LocalCacheChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { members, err := s.ChannelStore.UpdateMultipleMembers(members) if err != nil { return nil, err @@ -212,7 +212,7 @@ func (s LocalCacheChannelStore) UpdateMultipleMembers(members []*model.ChannelMe return members, nil } -func (s LocalCacheChannelStore) RemoveMember(channelId, userId string) *model.AppError { +func (s LocalCacheChannelStore) RemoveMember(channelId, userId string) error { err := s.ChannelStore.RemoveMember(channelId, userId) if err != nil { return err @@ -221,7 +221,7 @@ func (s LocalCacheChannelStore) RemoveMember(channelId, userId string) *model.Ap return nil } -func (s LocalCacheChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { +func (s LocalCacheChannelStore) RemoveMembers(channelId string, userIds []string) error { err := s.ChannelStore.RemoveMembers(channelId, userIds) if err != nil { return err diff --git a/store/opentracinglayer/opentracinglayer.go b/store/opentracinglayer/opentracinglayer.go index 75bf082d45..f82feca6f9 100644 --- a/store/opentracinglayer/opentracinglayer.go +++ b/store/opentracinglayer/opentracinglayer.go @@ -492,7 +492,7 @@ func (s *OpenTracingLayerChannelStore) AnalyticsDeletedTypeCount(teamId string, return result, err } -func (s *OpenTracingLayerChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, *model.AppError) { +func (s *OpenTracingLayerChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.AnalyticsTypeCount") s.Root.Store.SetContext(newCtx) @@ -595,7 +595,7 @@ func (s *OpenTracingLayerChannelStore) ClearSidebarOnTeamLeave(userId string, te return err } -func (s *OpenTracingLayerChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, *model.AppError) { +func (s *OpenTracingLayerChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.CountPostsAfter") s.Root.Store.SetContext(newCtx) @@ -757,7 +757,7 @@ func (s *OpenTracingLayerChannelStore) GetAll(teamId string) ([]*model.Channel, return result, err } -func (s *OpenTracingLayerChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetAllChannelMembersForUser") s.Root.Store.SetContext(newCtx) @@ -775,7 +775,7 @@ func (s *OpenTracingLayerChannelStore) GetAllChannelMembersForUser(userId string return result, err } -func (s *OpenTracingLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetAllChannelMembersNotifyPropsForChannel") s.Root.Store.SetContext(newCtx) @@ -955,7 +955,7 @@ func (s *OpenTracingLayerChannelStore) GetChannelMembersForExport(userId string, return result, err } -func (s *OpenTracingLayerChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetChannelMembersTimezones") s.Root.Store.SetContext(newCtx) @@ -1135,7 +1135,7 @@ func (s *OpenTracingLayerChannelStore) GetFromMaster(id string) (*model.Channel, return result, err } -func (s *OpenTracingLayerChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetGuestCount") s.Root.Store.SetContext(newCtx) @@ -1153,7 +1153,7 @@ func (s *OpenTracingLayerChannelStore) GetGuestCount(channelId string, allowFrom return result, err } -func (s *OpenTracingLayerChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMember") s.Root.Store.SetContext(newCtx) @@ -1171,7 +1171,7 @@ func (s *OpenTracingLayerChannelStore) GetMember(channelId string, userId string return result, err } -func (s *OpenTracingLayerChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMemberCount") s.Root.Store.SetContext(newCtx) @@ -1202,7 +1202,7 @@ func (s *OpenTracingLayerChannelStore) GetMemberCountFromCache(channelId string) return result } -func (s *OpenTracingLayerChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMemberCountsByGroup") s.Root.Store.SetContext(newCtx) @@ -1220,7 +1220,7 @@ func (s *OpenTracingLayerChannelStore) GetMemberCountsByGroup(channelID string, return result, err } -func (s *OpenTracingLayerChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMemberForPost") s.Root.Store.SetContext(newCtx) @@ -1238,7 +1238,7 @@ func (s *OpenTracingLayerChannelStore) GetMemberForPost(postId string, userId st return result, err } -func (s *OpenTracingLayerChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMembers") s.Root.Store.SetContext(newCtx) @@ -1274,7 +1274,7 @@ func (s *OpenTracingLayerChannelStore) GetMembersByIds(channelId string, userIds return result, err } -func (s *OpenTracingLayerChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMembersForUser") s.Root.Store.SetContext(newCtx) @@ -1292,7 +1292,7 @@ func (s *OpenTracingLayerChannelStore) GetMembersForUser(teamId string, userId s return result, err } -func (s *OpenTracingLayerChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMembersForUserWithPagination") s.Root.Store.SetContext(newCtx) @@ -1328,7 +1328,7 @@ func (s *OpenTracingLayerChannelStore) GetMoreChannels(teamId string, userId str return result, err } -func (s *OpenTracingLayerChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetPinnedPostCount") s.Root.Store.SetContext(newCtx) @@ -1346,7 +1346,7 @@ func (s *OpenTracingLayerChannelStore) GetPinnedPostCount(channelId string, allo return result, err } -func (s *OpenTracingLayerChannelStore) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) { +func (s *OpenTracingLayerChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetPinnedPosts") s.Root.Store.SetContext(newCtx) @@ -1508,7 +1508,7 @@ func (s *OpenTracingLayerChannelStore) GroupSyncedChannelCount() (int64, *model. return result, err } -func (s *OpenTracingLayerChannelStore) IncrementMentionCount(channelId string, userId string) *model.AppError { +func (s *OpenTracingLayerChannelStore) IncrementMentionCount(channelId string, userId string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.IncrementMentionCount") s.Root.Store.SetContext(newCtx) @@ -1702,7 +1702,7 @@ func (s *OpenTracingLayerChannelStore) PermanentDeleteByTeam(teamId string) erro return err } -func (s *OpenTracingLayerChannelStore) PermanentDeleteMembersByChannel(channelId string) *model.AppError { +func (s *OpenTracingLayerChannelStore) PermanentDeleteMembersByChannel(channelId string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.PermanentDeleteMembersByChannel") s.Root.Store.SetContext(newCtx) @@ -1720,7 +1720,7 @@ func (s *OpenTracingLayerChannelStore) PermanentDeleteMembersByChannel(channelId return err } -func (s *OpenTracingLayerChannelStore) PermanentDeleteMembersByUser(userId string) *model.AppError { +func (s *OpenTracingLayerChannelStore) PermanentDeleteMembersByUser(userId string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.PermanentDeleteMembersByUser") s.Root.Store.SetContext(newCtx) @@ -1756,7 +1756,7 @@ func (s *OpenTracingLayerChannelStore) RemoveAllDeactivatedMembers(channelId str return err } -func (s *OpenTracingLayerChannelStore) RemoveMember(channelId string, userId string) *model.AppError { +func (s *OpenTracingLayerChannelStore) RemoveMember(channelId string, userId string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.RemoveMember") s.Root.Store.SetContext(newCtx) @@ -1774,7 +1774,7 @@ func (s *OpenTracingLayerChannelStore) RemoveMember(channelId string, userId str return err } -func (s *OpenTracingLayerChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { +func (s *OpenTracingLayerChannelStore) RemoveMembers(channelId string, userIds []string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.RemoveMembers") s.Root.Store.SetContext(newCtx) @@ -1864,7 +1864,7 @@ func (s *OpenTracingLayerChannelStore) SaveDirectChannel(channel *model.Channel, return result, err } -func (s *OpenTracingLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s *OpenTracingLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.SaveMember") s.Root.Store.SetContext(newCtx) @@ -1882,7 +1882,7 @@ func (s *OpenTracingLayerChannelStore) SaveMember(member *model.ChannelMember) ( return result, err } -func (s *OpenTracingLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s *OpenTracingLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.SaveMultipleMembers") s.Root.Store.SetContext(newCtx) @@ -2044,7 +2044,7 @@ func (s *OpenTracingLayerChannelStore) Update(channel *model.Channel) (*model.Ch return result, err } -func (s *OpenTracingLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, *model.AppError) { +func (s *OpenTracingLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.UpdateLastViewedAt") s.Root.Store.SetContext(newCtx) @@ -2062,7 +2062,7 @@ func (s *OpenTracingLayerChannelStore) UpdateLastViewedAt(channelIds []string, u return result, err } -func (s *OpenTracingLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, *model.AppError) { +func (s *OpenTracingLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.UpdateLastViewedAtPost") s.Root.Store.SetContext(newCtx) @@ -2080,7 +2080,7 @@ func (s *OpenTracingLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model. return result, err } -func (s *OpenTracingLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s *OpenTracingLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.UpdateMember") s.Root.Store.SetContext(newCtx) @@ -2116,7 +2116,7 @@ func (s *OpenTracingLayerChannelStore) UpdateMembersRole(channelID string, userI return err } -func (s *OpenTracingLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s *OpenTracingLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.UpdateMultipleMembers") s.Root.Store.SetContext(newCtx) diff --git a/store/retrylayer/retrylayer.go b/store/retrylayer/retrylayer.go index 4c8f7ca645..3d424d7f8a 100644 --- a/store/retrylayer/retrylayer.go +++ b/store/retrylayer/retrylayer.go @@ -514,9 +514,23 @@ func (s *RetryLayerChannelStore) AnalyticsDeletedTypeCount(teamId string, channe } -func (s *RetryLayerChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, *model.AppError) { +func (s *RetryLayerChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, error) { - return s.ChannelStore.AnalyticsTypeCount(teamId, channelType) + tries := 0 + for { + result, err := s.ChannelStore.AnalyticsTypeCount(teamId, channelType) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -564,9 +578,23 @@ func (s *RetryLayerChannelStore) ClearSidebarOnTeamLeave(userId string, teamId s } -func (s *RetryLayerChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, *model.AppError) { +func (s *RetryLayerChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, error) { - return s.ChannelStore.CountPostsAfter(channelId, timestamp, userId) + tries := 0 + for { + result, err := s.ChannelStore.CountPostsAfter(channelId, timestamp, userId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -702,15 +730,43 @@ func (s *RetryLayerChannelStore) GetAll(teamId string) ([]*model.Channel, error) } -func (s *RetryLayerChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, *model.AppError) { +func (s *RetryLayerChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, error) { - return s.ChannelStore.GetAllChannelMembersForUser(userId, allowFromCache, includeDeleted) + tries := 0 + for { + result, err := s.ChannelStore.GetAllChannelMembersForUser(userId, allowFromCache, includeDeleted) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, *model.AppError) { +func (s *RetryLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, error) { - return s.ChannelStore.GetAllChannelMembersNotifyPropsForChannel(channelId, allowFromCache) + tries := 0 + for { + result, err := s.ChannelStore.GetAllChannelMembersNotifyPropsForChannel(channelId, allowFromCache) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -852,9 +908,23 @@ func (s *RetryLayerChannelStore) GetChannelMembersForExport(userId string, teamI } -func (s *RetryLayerChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { +func (s *RetryLayerChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, error) { - return s.ChannelStore.GetChannelMembersTimezones(channelId) + tries := 0 + for { + result, err := s.ChannelStore.GetChannelMembersTimezones(channelId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -996,21 +1066,63 @@ func (s *RetryLayerChannelStore) GetFromMaster(id string) (*model.Channel, error } -func (s *RetryLayerChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *RetryLayerChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { - return s.ChannelStore.GetGuestCount(channelId, allowFromCache) + tries := 0 + for { + result, err := s.ChannelStore.GetGuestCount(channelId, allowFromCache) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s *RetryLayerChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, error) { - return s.ChannelStore.GetMember(channelId, userId) + tries := 0 + for { + result, err := s.ChannelStore.GetMember(channelId, userId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *RetryLayerChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { - return s.ChannelStore.GetMemberCount(channelId, allowFromCache) + tries := 0 + for { + result, err := s.ChannelStore.GetMemberCount(channelId, allowFromCache) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -1020,21 +1132,63 @@ func (s *RetryLayerChannelStore) GetMemberCountFromCache(channelId string) int64 } -func (s *RetryLayerChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) { +func (s *RetryLayerChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) { - return s.ChannelStore.GetMemberCountsByGroup(channelID, includeTimezones) + tries := 0 + for { + result, err := s.ChannelStore.GetMemberCountsByGroup(channelID, includeTimezones) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s *RetryLayerChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, error) { - return s.ChannelStore.GetMemberForPost(postId, userId) + tries := 0 + for { + result, err := s.ChannelStore.GetMemberForPost(postId, userId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, *model.AppError) { +func (s *RetryLayerChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, error) { - return s.ChannelStore.GetMembers(channelId, offset, limit) + tries := 0 + for { + result, err := s.ChannelStore.GetMembers(channelId, offset, limit) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -1044,15 +1198,43 @@ func (s *RetryLayerChannelStore) GetMembersByIds(channelId string, userIds []str } -func (s *RetryLayerChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { +func (s *RetryLayerChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, error) { - return s.ChannelStore.GetMembersForUser(teamId, userId) + tries := 0 + for { + result, err := s.ChannelStore.GetMembersForUser(teamId, userId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, *model.AppError) { +func (s *RetryLayerChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, error) { - return s.ChannelStore.GetMembersForUserWithPagination(teamId, userId, page, perPage) + tries := 0 + for { + result, err := s.ChannelStore.GetMembersForUserWithPagination(teamId, userId, page, perPage) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -1076,15 +1258,43 @@ func (s *RetryLayerChannelStore) GetMoreChannels(teamId string, userId string, o } -func (s *RetryLayerChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *RetryLayerChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { - return s.ChannelStore.GetPinnedPostCount(channelId, allowFromCache) + tries := 0 + for { + result, err := s.ChannelStore.GetPinnedPostCount(channelId, allowFromCache) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) { +func (s *RetryLayerChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) { - return s.ChannelStore.GetPinnedPosts(channelId) + tries := 0 + for { + result, err := s.ChannelStore.GetPinnedPosts(channelId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -1192,9 +1402,23 @@ func (s *RetryLayerChannelStore) GroupSyncedChannelCount() (int64, *model.AppErr } -func (s *RetryLayerChannelStore) IncrementMentionCount(channelId string, userId string) *model.AppError { +func (s *RetryLayerChannelStore) IncrementMentionCount(channelId string, userId string) error { - return s.ChannelStore.IncrementMentionCount(channelId, userId) + tries := 0 + for { + err := s.ChannelStore.IncrementMentionCount(channelId, userId) + if err == nil { + return nil + } + if !isRepeatableError(err) { + return err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return err + } + } } @@ -1312,15 +1536,43 @@ func (s *RetryLayerChannelStore) PermanentDeleteByTeam(teamId string) error { } -func (s *RetryLayerChannelStore) PermanentDeleteMembersByChannel(channelId string) *model.AppError { +func (s *RetryLayerChannelStore) PermanentDeleteMembersByChannel(channelId string) error { - return s.ChannelStore.PermanentDeleteMembersByChannel(channelId) + tries := 0 + for { + err := s.ChannelStore.PermanentDeleteMembersByChannel(channelId) + if err == nil { + return nil + } + if !isRepeatableError(err) { + return err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return err + } + } } -func (s *RetryLayerChannelStore) PermanentDeleteMembersByUser(userId string) *model.AppError { +func (s *RetryLayerChannelStore) PermanentDeleteMembersByUser(userId string) error { - return s.ChannelStore.PermanentDeleteMembersByUser(userId) + tries := 0 + for { + err := s.ChannelStore.PermanentDeleteMembersByUser(userId) + if err == nil { + return nil + } + if !isRepeatableError(err) { + return err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return err + } + } } @@ -1330,15 +1582,43 @@ func (s *RetryLayerChannelStore) RemoveAllDeactivatedMembers(channelId string) * } -func (s *RetryLayerChannelStore) RemoveMember(channelId string, userId string) *model.AppError { +func (s *RetryLayerChannelStore) RemoveMember(channelId string, userId string) error { - return s.ChannelStore.RemoveMember(channelId, userId) + tries := 0 + for { + err := s.ChannelStore.RemoveMember(channelId, userId) + if err == nil { + return nil + } + if !isRepeatableError(err) { + return err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return err + } + } } -func (s *RetryLayerChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { +func (s *RetryLayerChannelStore) RemoveMembers(channelId string, userIds []string) error { - return s.ChannelStore.RemoveMembers(channelId, userIds) + tries := 0 + for { + err := s.ChannelStore.RemoveMembers(channelId, userIds) + if err == nil { + return nil + } + if !isRepeatableError(err) { + return err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return err + } + } } @@ -1408,15 +1688,43 @@ func (s *RetryLayerChannelStore) SaveDirectChannel(channel *model.Channel, membe } -func (s *RetryLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s *RetryLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) { - return s.ChannelStore.SaveMember(member) + tries := 0 + for { + result, err := s.ChannelStore.SaveMember(member) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s *RetryLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { - return s.ChannelStore.SaveMultipleMembers(members) + tries := 0 + for { + result, err := s.ChannelStore.SaveMultipleMembers(members) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -1496,21 +1804,63 @@ func (s *RetryLayerChannelStore) Update(channel *model.Channel) (*model.Channel, } -func (s *RetryLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, *model.AppError) { +func (s *RetryLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, error) { - return s.ChannelStore.UpdateLastViewedAt(channelIds, userId) + tries := 0 + for { + result, err := s.ChannelStore.UpdateLastViewedAt(channelIds, userId) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, *model.AppError) { +func (s *RetryLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, error) { - return s.ChannelStore.UpdateLastViewedAtPost(unreadPost, userID, mentionCount) + tries := 0 + for { + result, err := s.ChannelStore.UpdateLastViewedAtPost(unreadPost, userID, mentionCount) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } -func (s *RetryLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s *RetryLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) { - return s.ChannelStore.UpdateMember(member) + tries := 0 + for { + result, err := s.ChannelStore.UpdateMember(member) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } @@ -1520,9 +1870,23 @@ func (s *RetryLayerChannelStore) UpdateMembersRole(channelID string, userIDs []s } -func (s *RetryLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s *RetryLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { - return s.ChannelStore.UpdateMultipleMembers(members) + tries := 0 + for { + result, err := s.ChannelStore.UpdateMultipleMembers(members) + if err == nil { + return result, nil + } + if !isRepeatableError(err) { + return result, err + } + tries++ + if tries >= 3 { + err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures") + return result, err + } + } } diff --git a/store/searchlayer/channel_layer.go b/store/searchlayer/channel_layer.go index 20fdd9958e..724c130295 100644 --- a/store/searchlayer/channel_layer.go +++ b/store/searchlayer/channel_layer.go @@ -63,7 +63,7 @@ func (c *SearchChannelStore) Update(channel *model.Channel) (*model.Channel, err return updatedChannel, err } -func (c *SearchChannelStore) UpdateMember(cm *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (c *SearchChannelStore) UpdateMember(cm *model.ChannelMember) (*model.ChannelMember, error) { member, err := c.ChannelStore.UpdateMember(cm) if err == nil { c.rootStore.indexUserFromID(cm.UserId) @@ -77,7 +77,7 @@ func (c *SearchChannelStore) UpdateMember(cm *model.ChannelMember) (*model.Chann return member, err } -func (c *SearchChannelStore) SaveMember(cm *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (c *SearchChannelStore) SaveMember(cm *model.ChannelMember) (*model.ChannelMember, error) { member, err := c.ChannelStore.SaveMember(cm) if err == nil { c.rootStore.indexUserFromID(cm.UserId) @@ -91,7 +91,7 @@ func (c *SearchChannelStore) SaveMember(cm *model.ChannelMember) (*model.Channel return member, err } -func (c *SearchChannelStore) RemoveMember(channelId, userIdToRemove string) *model.AppError { +func (c *SearchChannelStore) RemoveMember(channelId, userIdToRemove string) error { err := c.ChannelStore.RemoveMember(channelId, userIdToRemove) if err == nil { c.rootStore.indexUserFromID(userIdToRemove) @@ -99,7 +99,7 @@ func (c *SearchChannelStore) RemoveMember(channelId, userIdToRemove string) *mod return err } -func (c *SearchChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { +func (c *SearchChannelStore) RemoveMembers(channelId string, userIds []string) error { if err := c.ChannelStore.RemoveMembers(channelId, userIds); err != nil { return err } @@ -177,7 +177,7 @@ func (c *SearchChannelStore) searchAutocompleteChannels(engine searchengine.Sear return &channelList, nil } -func (c *SearchChannelStore) PermanentDeleteMembersByUser(userId string) *model.AppError { +func (c *SearchChannelStore) PermanentDeleteMembersByUser(userId string) error { err := c.ChannelStore.PermanentDeleteMembersByUser(userId) if err == nil { c.rootStore.indexUserFromID(userId) @@ -202,7 +202,7 @@ func (c *SearchChannelStore) RemoveAllDeactivatedMembers(channelId string) *mode return err } -func (c *SearchChannelStore) PermanentDeleteMembersByChannel(channelId string) *model.AppError { +func (c *SearchChannelStore) PermanentDeleteMembersByChannel(channelId string) error { profiles, errProfiles := c.rootStore.User().GetAllProfilesInChannel(channelId, true) if errProfiles != nil { mlog.Error("Encountered error indexing users for channel", mlog.String("channel_id", channelId), mlog.Err(errProfiles)) diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index ba0374f2c1..75393d8e48 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -744,12 +744,12 @@ func (s SqlChannelStore) Get(id string, allowFromCache bool) (*model.Channel, er return s.get(id, false, allowFromCache) } -func (s SqlChannelStore) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) { +func (s SqlChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) { pl := model.NewPostList() var posts []*model.Post if _, err := s.GetReplica().Select(&posts, "SELECT *, (SELECT count(Posts.Id) FROM Posts WHERE Posts.RootId = (CASE WHEN p.RootId = '' THEN p.Id ELSE p.RootId END) AND Posts.DeleteAt = 0) as ReplyCount FROM Posts p WHERE IsPinned = true AND ChannelId = :ChannelId AND DeleteAt = 0 ORDER BY CreateAt ASC", map[string]interface{}{"ChannelId": channelId}); err != nil { - return nil, model.NewAppError("SqlPostStore.GetPinnedPosts", "store.sql_channel.pinned_posts.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "failed to find Posts") } for _, post := range posts { pl.AddPost(post) @@ -918,10 +918,10 @@ func (s SqlChannelStore) permanentDeleteT(transaction *gorp.Transaction, channel return nil } -func (s SqlChannelStore) PermanentDeleteMembersByChannel(channelId string) *model.AppError { +func (s SqlChannelStore) PermanentDeleteMembersByChannel(channelId string) error { _, err := s.GetMaster().Exec("DELETE FROM ChannelMembers WHERE ChannelId = :ChannelId", map[string]interface{}{"ChannelId": channelId}) if err != nil { - return model.NewAppError("SqlChannelStore.RemoveAllMembersByChannel", "store.sql_channel.remove_member.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to delete Channel with channelId=%s", channelId) } return nil @@ -1382,46 +1382,33 @@ var CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY = ` Schemes TeamScheme ON Teams.SchemeId = TeamScheme.Id ` -func (s SqlChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s SqlChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { for _, member := range members { defer s.InvalidateAllChannelMembersForUser(member.UserId) } transaction, err := s.GetMaster().Begin() if err != nil { - return nil, model.NewAppError("SqlChannelStore.SaveMember", "store.sql_channel.save_member.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "begin_transaction") } defer finalizeTransaction(transaction) newMembers, err := s.saveMultipleMembersT(transaction, members) - if err != nil { // TODO: this will go away once SaveMultipleMembers is migrated too. - var cErr *store.ErrConflict - var appErr *model.AppError - switch { - case errors.As(err, &cErr): - switch cErr.Resource { - case "ChannelMembers": - return nil, model.NewAppError("CreateChannel", "store.sql_channel.save_member.exists.app_error", nil, cErr.Error(), http.StatusBadRequest) - } - case errors.As(err, &appErr): // in case we haven't converted to plain error. - return nil, appErr - default: // last fallback in case it doesn't map to an existing app error. - // TODO: This error key would go away once this store method is migrated to return plain errors - return nil, model.NewAppError("CreateDirectChannel", "app.channel.create_direct_channel.internal_error", nil, err.Error(), http.StatusInternalServerError) - } + if err != nil { + return nil, err } if err := transaction.Commit(); err != nil { - return nil, model.NewAppError("SqlChannelStore.SaveMember", "store.sql_channel.save_member.commit_transaction.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "commit_transaction") } return newMembers, nil } -func (s SqlChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { - newMembers, appErr := s.SaveMultipleMembers([]*model.ChannelMember{member}) - if appErr != nil { - return nil, appErr +func (s SqlChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) { + newMembers, err := s.SaveMultipleMembers([]*model.ChannelMember{member}) + if err != nil { + return nil, err } return newMembers[0], nil } @@ -1575,7 +1562,7 @@ func (s SqlChannelStore) saveMemberT(transaction *gorp.Transaction, member *mode return members[0], nil } -func (s SqlChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s SqlChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { for _, member := range members { member.PreUpdate() @@ -1588,34 +1575,34 @@ func (s SqlChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ( var err error if transaction, err = s.GetMaster().Begin(); err != nil { - return nil, model.NewAppError("SqlChannelStore.MigrateChannelMembers", "store.sql_channel.migrate_channel_members.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "begin_transaction") } defer finalizeTransaction(transaction) updatedMembers := []*model.ChannelMember{} for _, member := range members { if _, err := transaction.Update(NewChannelMemberFromModel(member)); err != nil { - return nil, model.NewAppError("SqlChannelStore.UpdateMember", "store.sql_channel.update_member.app_error", nil, "channel_id="+member.ChannelId+", "+"user_id="+member.UserId+", "+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "failed to update ChannelMember") } // TODO: Get this out of the transaction when is possible var dbMember channelMemberWithSchemeRoles if err := transaction.SelectOne(&dbMember, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelMembers.ChannelId = :ChannelId AND ChannelMembers.UserId = :UserId", map[string]interface{}{"ChannelId": member.ChannelId, "UserId": member.UserId}); err != nil { if err == sql.ErrNoRows { - return nil, model.NewAppError("SqlChannelStore.GetMember", store.MISSING_CHANNEL_MEMBER_ERROR, nil, "channel_id="+member.ChannelId+"user_id="+member.UserId+","+err.Error(), http.StatusNotFound) + return nil, store.NewErrNotFound("ChannelMember", fmt.Sprintf("channelId=%s, userId=%s", member.ChannelId, member.UserId)) } - return nil, model.NewAppError("SqlChannelStore.GetMember", "store.sql_channel.get_member.app_error", nil, "channel_id="+member.ChannelId+"user_id="+member.UserId+","+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to get ChannelMember with channelId=%s and userId=%s", member.ChannelId, member.UserId) } updatedMembers = append(updatedMembers, dbMember.ToModel()) } if err := transaction.Commit(); err != nil { - return nil, model.NewAppError("SqlChannelStore.MigrateChannelMembers", "store.sql_channel.migrate_channel_members.commit_transaction.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "commit_transaction") } return updatedMembers, nil } -func (s SqlChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s SqlChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) { updatedMembers, err := s.UpdateMultipleMembers([]*model.ChannelMember{member}) if err != nil { return nil, err @@ -1623,17 +1610,17 @@ func (s SqlChannelStore) UpdateMember(member *model.ChannelMember) (*model.Chann return updatedMembers[0], nil } -func (s SqlChannelStore) GetMembers(channelId string, offset, limit int) (*model.ChannelMembers, *model.AppError) { +func (s SqlChannelStore) GetMembers(channelId string, offset, limit int) (*model.ChannelMembers, error) { var dbMembers channelMemberWithSchemeRolesList _, err := s.GetReplica().Select(&dbMembers, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelId = :ChannelId LIMIT :Limit OFFSET :Offset", map[string]interface{}{"ChannelId": channelId, "Limit": limit, "Offset": offset}) if err != nil { - return nil, model.NewAppError("SqlChannelStore.GetMembers", "store.sql_channel.get_members.app_error", nil, "channel_id="+channelId+","+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to get ChannelMembers with channelId=%s", channelId) } return dbMembers.ToModel(), nil } -func (s SqlChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { +func (s SqlChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, error) { var dbMembersTimezone []model.StringMap _, err := s.GetReplica().Select(&dbMembersTimezone, ` SELECT @@ -1646,20 +1633,20 @@ func (s SqlChannelStore) GetChannelMembersTimezones(channelId string) ([]model.S `, map[string]interface{}{"ChannelId": channelId}) if err != nil { - return nil, model.NewAppError("SqlChannelStore.GetChannelMembersTimezones", "store.sql_channel.get_members.app_error", nil, "channel_id="+channelId+","+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find user timezones for users in channels with channelId=%s", channelId) } return dbMembersTimezone, nil } -func (s SqlChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s SqlChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, error) { var dbMember channelMemberWithSchemeRoles if err := s.GetReplica().SelectOne(&dbMember, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelMembers.ChannelId = :ChannelId AND ChannelMembers.UserId = :UserId", map[string]interface{}{"ChannelId": channelId, "UserId": userId}); err != nil { if err == sql.ErrNoRows { - return nil, model.NewAppError("SqlChannelStore.GetMember", store.MISSING_CHANNEL_MEMBER_ERROR, nil, "channel_id="+channelId+"user_id="+userId+","+err.Error(), http.StatusNotFound) + return nil, store.NewErrNotFound("ChannelMember", fmt.Sprintf("channelId=%s, userId=%s", channelId, userId)) } - return nil, model.NewAppError("SqlChannelStore.GetMember", "store.sql_channel.get_member.app_error", nil, "channel_id="+channelId+"user_id="+userId+","+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to get ChannelMember with channelId=%s and userId=%s", channelId, userId) } return dbMember.ToModel(), nil @@ -1702,7 +1689,7 @@ func (s SqlChannelStore) IsUserInChannelUseCache(userId string, channelId string return false } -func (s SqlChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s SqlChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, error) { var dbMember channelMemberWithSchemeRoles query := ` SELECT @@ -1730,12 +1717,12 @@ func (s SqlChannelStore) GetMemberForPost(postId string, userId string) (*model. AND Posts.Id = :PostId` if err := s.GetReplica().SelectOne(&dbMember, query, map[string]interface{}{"UserId": userId, "PostId": postId}); err != nil { - return nil, model.NewAppError("SqlChannelStore.GetMemberForPost", "store.sql_channel.get_member_for_post.app_error", nil, "postId="+postId+", err="+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to get ChannelMember with postId=%s and userId=%s", postId, userId) } return dbMember.ToModel(), nil } -func (s SqlChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, *model.AppError) { +func (s SqlChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, error) { cache_key := userId if includeDeleted { cache_key += "_deleted" @@ -1754,17 +1741,6 @@ func (s SqlChannelStore) GetAllChannelMembersForUser(userId string, allowFromCac s.metrics.IncrementMemCacheMissCounter("All Channel Members for User") } - failure := func(err error) *model.AppError { - // TODO: This error key would go away once this store method is migrated to return plain errors - return model.NewAppError( - "SqlChannelStore.GetAllChannelMembersForUser", - "app.channel.get_channels.get.app_error", - nil, - "userId="+userId+", err="+err.Error(), - http.StatusInternalServerError, - ) - } - query := s.getQueryBuilder(). Select(` ChannelMembers.ChannelId, ChannelMembers.Roles, ChannelMembers.SchemeGuest, @@ -1787,12 +1763,12 @@ func (s SqlChannelStore) GetAllChannelMembersForUser(userId string, allowFromCac } queryString, args, err := query.ToSql() if err != nil { - return nil, failure(err) + return nil, errors.Wrap(err, "channel_tosql") } rows, err := s.GetReplica().Db.Query(queryString, args...) if err != nil { - return nil, failure(err) + return nil, errors.Wrap(err, "failed to find ChannelMembers, TeamScheme and ChannelScheme data") } var data allChannelMembers @@ -1806,12 +1782,12 @@ func (s SqlChannelStore) GetAllChannelMembersForUser(userId string, allowFromCac &cm.ChannelSchemeDefaultUserRole, &cm.ChannelSchemeDefaultAdminRole, ) if err != nil { - return nil, failure(err) + return nil, errors.Wrap(err, "unable to scan columns") } data = append(data, cm) } if err = rows.Err(); err != nil { - return nil, failure(err) + return nil, errors.Wrap(err, "error while iterating over rows") } ids := data.ToMapStringString() @@ -1833,7 +1809,7 @@ type allChannelMemberNotifyProps struct { NotifyProps model.StringMap } -func (s SqlChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, *model.AppError) { +func (s SqlChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, error) { if allowFromCache { var cacheItem map[string]model.StringMap if err := allChannelMembersNotifyPropsForChannelCache.Get(channelId, &cacheItem); err == nil { @@ -1855,7 +1831,7 @@ func (s SqlChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId str WHERE ChannelId = :ChannelId`, map[string]interface{}{"ChannelId": channelId}) if err != nil { - return nil, model.NewAppError("SqlChannelStore.GetAllChannelMembersPropsForChannel", "store.sql_channel.get_members.app_error", nil, "channelId="+channelId+", err="+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find data from ChannelMembers with channelId=%s", channelId) } props := make(map[string]model.StringMap) @@ -1876,7 +1852,7 @@ func (s SqlChannelStore) GetMemberCountFromCache(channelId string) int64 { return count } -func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { count, err := s.GetReplica().SelectInt(` SELECT count(*) @@ -1888,7 +1864,7 @@ func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) ( AND ChannelMembers.ChannelId = :ChannelId AND Users.DeleteAt = 0`, map[string]interface{}{"ChannelId": channelId}) if err != nil { - return 0, model.NewAppError("SqlChannelStore.GetMemberCount", "store.sql_channel.get_member_count.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return 0, errors.Wrapf(err, "failed to count ChanenelMembers with channelId=%s", channelId) } return count, nil @@ -1896,7 +1872,7 @@ func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) ( // GetMemberCountsByGroup returns a slice of ChannelMemberCountByGroup for a given channel // which contains the number of channel members for each group and optionally the number of unique timezones present for each group in the channel -func (s SqlChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) { +func (s SqlChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) { selectStr := "GroupMembers.GroupId, COUNT(ChannelMembers.UserId) AS ChannelMemberCount" if includeTimezones { @@ -1954,11 +1930,11 @@ func (s SqlChannelStore) GetMemberCountsByGroup(channelID string, includeTimezon queryString, args, err := query.ToSql() if err != nil { - return nil, model.NewAppError("SqlChannelStore.GetMemberCountsByGroup", "store.sql.build_query.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "channel_tosql") } var data []*model.ChannelMemberCountByGroup if _, err = s.GetReplica().Select(&data, queryString, args...); err != nil { - return nil, model.NewAppError("SqlChannelStore.GetMemberCountsByGroup", "store.sql_channel.get_member_count.app_error", nil, "channel_id="+channelID+", "+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to count ChannelMembers with channelId=%s", channelID) } return data, nil @@ -1967,7 +1943,7 @@ func (s SqlChannelStore) GetMemberCountsByGroup(channelID string, includeTimezon func (s SqlChannelStore) InvalidatePinnedPostCount(channelId string) { } -func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { count, err := s.GetReplica().SelectInt(` SELECT count(*) FROM Posts @@ -1977,7 +1953,7 @@ func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache boo AND DeleteAt = 0`, map[string]interface{}{"ChannelId": channelId}) if err != nil { - return 0, model.NewAppError("SqlChannelStore.GetPinnedPostCount", "store.sql_channel.get_pinnedpost_count.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return 0, errors.Wrapf(err, "failed to count pinned Posts with channelId=%s", channelId) } return count, nil @@ -1986,7 +1962,7 @@ func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache boo func (s SqlChannelStore) InvalidateGuestCount(channelId string) { } -func (s SqlChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s SqlChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { count, err := s.GetReplica().SelectInt(` SELECT count(*) @@ -1999,43 +1975,43 @@ func (s SqlChannelStore) GetGuestCount(channelId string, allowFromCache bool) (i AND ChannelMembers.SchemeGuest = TRUE AND Users.DeleteAt = 0`, map[string]interface{}{"ChannelId": channelId}) if err != nil { - return 0, model.NewAppError("SqlChannelStore.GetGuestCount", "store.sql_channel.get_member_count.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return 0, errors.Wrapf(err, "failed to count Guests with channelId=%s", channelId) } return count, nil } -func (s SqlChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { - query := s.getQueryBuilder(). +func (s SqlChannelStore) RemoveMembers(channelId string, userIds []string) error { + builder := s.getQueryBuilder(). Delete("ChannelMembers"). Where(sq.Eq{"ChannelId": channelId}). Where(sq.Eq{"UserId": userIds}) - sql, args, err := query.ToSql() + query, args, err := builder.ToSql() if err != nil { - return model.NewAppError("SqlChannelStore.RemoveMember", "store.sql_channel.remove_member.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "channel_tosql") } - _, err = s.GetMaster().Exec(sql, args...) + _, err = s.GetMaster().Exec(query, args...) if err != nil { - return model.NewAppError("SqlChannelStore.RemoveMember", "store.sql_channel.remove_member.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "failed to delete ChannelMembers") } // cleanup sidebarchannels table if the user is no longer a member of that channel - sql, args, err = s.getQueryBuilder(). + query, args, err = s.getQueryBuilder(). Delete("SidebarChannels"). Where(sq.And{ sq.Eq{"ChannelId": channelId}, sq.Eq{"UserId": userIds}, }).ToSql() if err != nil { - return model.NewAppError("SqlChannelStore.RemoveMember", "store.sql_channel.remove_member.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "channel_tosql") } - _, err = s.GetMaster().Exec(sql, args...) + _, err = s.GetMaster().Exec(query, args...) if err != nil { - return model.NewAppError("SqlChannelStore.RemoveMember", "store.sql_channel.remove_member.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "failed to delete SidebarChannels") } return nil } -func (s SqlChannelStore) RemoveMember(channelId string, userId string) *model.AppError { +func (s SqlChannelStore) RemoveMember(channelId string, userId string) error { return s.RemoveMembers(channelId, []string{userId}) } @@ -2064,14 +2040,14 @@ func (s SqlChannelStore) RemoveAllDeactivatedMembers(channelId string) *model.Ap return nil } -func (s SqlChannelStore) PermanentDeleteMembersByUser(userId string) *model.AppError { +func (s SqlChannelStore) PermanentDeleteMembersByUser(userId string) error { if _, err := s.GetMaster().Exec("DELETE FROM ChannelMembers WHERE UserId = :UserId", map[string]interface{}{"UserId": userId}); err != nil { - return model.NewAppError("SqlChannelStore.ChannelPermanentDeleteMembersByUser", "store.sql_channel.permanent_delete_members_by_user.app_error", nil, "user_id="+userId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to permanent delete ChannelMembers with userId=%s", userId) } return nil } -func (s SqlChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, *model.AppError) { +func (s SqlChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, error) { keys, props := MapStringsToQueryParams(channelIds, "Channel") props["UserId"] = userId @@ -2101,21 +2077,12 @@ func (s SqlChannelStore) UpdateLastViewedAt(channelIds []string, userId string) } _, err := s.GetMaster().Select(&lastPostAtTimes, query, props) - if err != nil || len(lastPostAtTimes) == 0 { - status := http.StatusInternalServerError - var extra string - if err == nil { - status = http.StatusBadRequest - extra = "No channels found" - } else { - extra = err.Error() - } + if err != nil { + return nil, errors.Wrapf(err, "failed to find ChannelMembers data with userId=%s and channelId in %v", userId, channelIds) + } - return nil, model.NewAppError("SqlChannelStore.UpdateLastViewedAt", - "store.sql_channel.update_last_viewed_at.app_error", - nil, - "channel_ids="+strings.Join(channelIds, ",")+", user_id="+userId+", "+extra, - status) + if len(lastPostAtTimes) == 0 { + return nil, store.NewErrInvalidInput("Channel", "Id", fmt.Sprintf("%v", channelIds)) } times := map[string]int64{} @@ -2152,14 +2119,14 @@ func (s SqlChannelStore) UpdateLastViewedAt(channelIds []string, userId string) AND ChannelId IN ` + keys if _, err := s.GetMaster().Exec(updateQuery, props); err != nil { - return nil, model.NewAppError("SqlChannelStore.UpdateLastViewedAt", "store.sql_channel.update_last_viewed_at.app_error", nil, "channel_ids="+strings.Join(channelIds, ",")+", user_id="+userId+", "+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to update ChannelMembers with userId=%s and channelId in %v", userId, channelIds) } return times, nil } // CountPostsAfter returns the number of posts in the given channel created after but not including the given timestamp. If given a non-empty user ID, only counts posts made by that user. -func (s SqlChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, *model.AppError) { +func (s SqlChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, error) { joinLeavePostTypes, params := MapStringsToQueryParams([]string{ // These types correspond to the ones checked by Post.IsJoinLeaveMessage model.POST_JOIN_LEAVE, @@ -2194,7 +2161,7 @@ func (s SqlChannelStore) CountPostsAfter(channelId string, timestamp int64, user unread, err := s.GetReplica().SelectInt(query, params) if err != nil { - return 0, model.NewAppError("SqlChannelStore.CountPostsAfter", "store.sql_channel.count_posts_since.app_error", nil, fmt.Sprintf("channel_id=%s, timestamp=%d, err=%s", channelId, timestamp, err), http.StatusInternalServerError) + return 0, errors.Wrap(err, "failed to count Posts") } return int(unread), nil } @@ -2202,12 +2169,12 @@ func (s SqlChannelStore) CountPostsAfter(channelId string, timestamp int64, user // UpdateLastViewedAtPost updates a ChannelMember as if the user last read the channel at the time of the given post. // If the provided mentionCount is -1, the given post and all posts after it are considered to be mentions. Returns // an updated model.ChannelUnreadAt that can be returned to the client. -func (s SqlChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, *model.AppError) { +func (s SqlChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, error) { unreadDate := unreadPost.CreateAt - 1 - unread, appErr := s.CountPostsAfter(unreadPost.ChannelId, unreadDate, "") - if appErr != nil { - return nil, appErr + unread, err := s.CountPostsAfter(unreadPost.ChannelId, unreadDate, "") + if err != nil { + return nil, err } params := map[string]interface{}{ @@ -2233,9 +2200,9 @@ func (s SqlChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID s UserId = :userId AND ChannelId = :channelId ` - _, err := s.GetMaster().Exec(setUnreadQuery, params) + _, err = s.GetMaster().Exec(setUnreadQuery, params) if err != nil { - return nil, model.NewAppError("SqlChannelStore.UpdateLastViewedAtPost", "store.sql_channel.update_last_viewed_at_post.app_error", params, "Error setting channel "+unreadPost.ChannelId+" as unread: "+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrap(err, "failed to update ChannelMembers") } chanUnreadQuery := ` @@ -2257,12 +2224,12 @@ func (s SqlChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID s ` result := &model.ChannelUnreadAt{} if err = s.GetMaster().SelectOne(result, chanUnreadQuery, params); err != nil { - return nil, model.NewAppError("SqlChannelStore.UpdateLastViewedAtPost", "store.sql_channel.update_last_viewed_at_post.app_error", params, "Error retrieving unread status from channel "+unreadPost.ChannelId+", error was: "+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to get ChannelMember with channelId=%s", unreadPost.ChannelId) } return result, nil } -func (s SqlChannelStore) IncrementMentionCount(channelId string, userId string) *model.AppError { +func (s SqlChannelStore) IncrementMentionCount(channelId string, userId string) error { _, err := s.GetMaster().Exec( `UPDATE ChannelMembers @@ -2274,7 +2241,7 @@ func (s SqlChannelStore) IncrementMentionCount(channelId string, userId string) AND ChannelId = :ChannelId`, map[string]interface{}{"ChannelId": channelId, "UserId": userId, "LastUpdateAt": model.GetMillis()}) if err != nil { - return model.NewAppError("SqlChannelStore.IncrementMentionCount", "store.sql_channel.increment_mention_count.app_error", nil, "channel_id="+channelId+", user_id="+userId+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to Update ChannelMembers with channelId=%s and userId=%s", channelId, userId) } return nil @@ -2325,7 +2292,7 @@ func (s SqlChannelStore) GetForPost(postId string) (*model.Channel, error) { return channel, nil } -func (s SqlChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, *model.AppError) { +func (s SqlChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, error) { query := "SELECT COUNT(Id) AS Value FROM Channels WHERE Type = :ChannelType" if len(teamId) > 0 { @@ -2334,7 +2301,7 @@ func (s SqlChannelStore) AnalyticsTypeCount(teamId string, channelType string) ( value, err := s.GetReplica().SelectInt(query, map[string]interface{}{"TeamId": teamId, "ChannelType": channelType}) if err != nil { - return int64(0), model.NewAppError("SqlChannelStore.AnalyticsTypeCount", "store.sql_channel.analytics_type_count.app_error", nil, err.Error(), http.StatusInternalServerError) + return int64(0), errors.Wrap(err, "failed to count Channels") } return value, nil } @@ -2354,23 +2321,23 @@ func (s SqlChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType st return v, nil } -func (s SqlChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { +func (s SqlChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, error) { var dbMembers channelMemberWithSchemeRolesList _, err := s.GetReplica().Select(&dbMembers, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelMembers.UserId = :UserId AND (Teams.Id = :TeamId OR Teams.Id = '' OR Teams.Id IS NULL)", map[string]interface{}{"TeamId": teamId, "UserId": userId}) if err != nil { - return nil, model.NewAppError("SqlChannelStore.GetMembersForUser", "store.sql_channel.get_members.app_error", nil, "teamId="+teamId+", userId="+userId+", err="+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find ChannelMembers data with teamId=%s and userId=%s", teamId, userId) } return dbMembers.ToModel(), nil } -func (s SqlChannelStore) GetMembersForUserWithPagination(teamId, userId string, page, perPage int) (*model.ChannelMembers, *model.AppError) { +func (s SqlChannelStore) GetMembersForUserWithPagination(teamId, userId string, page, perPage int) (*model.ChannelMembers, error) { var dbMembers channelMemberWithSchemeRolesList offset := page * perPage _, err := s.GetReplica().Select(&dbMembers, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelMembers.UserId = :UserId Limit :Limit Offset :Offset", map[string]interface{}{"TeamId": teamId, "UserId": userId, "Limit": perPage, "Offset": offset}) if err != nil { - return nil, model.NewAppError("SqlChannelStore.GetMembersForUserWithPagination", "store.sql_channel.get_members.app_error", nil, "teamId="+teamId+", userId="+userId+", err="+err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find ChannelMembers data with teamId=%s and userId=%s", teamId, userId) } return dbMembers.ToModel(), nil @@ -3175,7 +3142,7 @@ func (s SqlChannelStore) GetChannelMembersForExport(userId string, teamId string map[string]interface{}{"TeamId": teamId, "UserId": userId}) 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) + return nil, model.NewAppError("SqlChannelStore.GetChannelMembersForExport", "app.channel.get_members.app_error", nil, "teamId="+teamId+", userId="+userId+", err="+err.Error(), http.StatusInternalServerError) } return members, nil diff --git a/store/store.go b/store/store.go index 6cf1109239..84ef2bdfbe 100644 --- a/store/store.go +++ b/store/store.go @@ -162,39 +162,39 @@ type ChannelStore interface { GetAll(teamId string) ([]*model.Channel, error) GetChannelsByIds(channelIds []string, includeDeleted bool) ([]*model.Channel, error) GetForPost(postId string) (*model.Channel, error) - SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) - SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) - UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) - UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) - GetMembers(channelId string, offset, limit int) (*model.ChannelMembers, *model.AppError) - GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) - GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) - GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, *model.AppError) + SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) + SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) + UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) + UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) + GetMembers(channelId string, offset, limit int) (*model.ChannelMembers, error) + GetMember(channelId string, userId string) (*model.ChannelMember, error) + GetChannelMembersTimezones(channelId string) ([]model.StringMap, error) + GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, error) InvalidateAllChannelMembersForUser(userId string) IsUserInChannelUseCache(userId string, channelId string) bool - GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, *model.AppError) + GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, error) InvalidateCacheForChannelMembersNotifyProps(channelId string) - GetMemberForPost(postId string, userId string) (*model.ChannelMember, *model.AppError) + GetMemberForPost(postId string, userId string) (*model.ChannelMember, error) InvalidateMemberCount(channelId string) GetMemberCountFromCache(channelId string) int64 - GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) - GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) + GetMemberCount(channelId string, allowFromCache bool) (int64, error) + GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) InvalidatePinnedPostCount(channelId string) - GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) + GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) InvalidateGuestCount(channelId string) - GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) - GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) - RemoveMember(channelId string, userId string) *model.AppError - RemoveMembers(channelId string, userIds []string) *model.AppError - PermanentDeleteMembersByUser(userId string) *model.AppError - PermanentDeleteMembersByChannel(channelId string) *model.AppError - UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, *model.AppError) - UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, *model.AppError) - CountPostsAfter(channelId string, timestamp int64, userId string) (int, *model.AppError) - IncrementMentionCount(channelId string, userId string) *model.AppError - AnalyticsTypeCount(teamId string, channelType string) (int64, *model.AppError) - GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) - GetMembersForUserWithPagination(teamId, userId string, page, perPage int) (*model.ChannelMembers, *model.AppError) + GetGuestCount(channelId string, allowFromCache bool) (int64, error) + GetPinnedPosts(channelId string) (*model.PostList, error) + RemoveMember(channelId string, userId string) error + RemoveMembers(channelId string, userIds []string) error + PermanentDeleteMembersByUser(userId string) error + PermanentDeleteMembersByChannel(channelId string) error + UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, error) + UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, error) + CountPostsAfter(channelId string, timestamp int64, userId string) (int, error) + IncrementMentionCount(channelId string, userId string) error + AnalyticsTypeCount(teamId string, channelType string) (int64, error) + GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, error) + GetMembersForUserWithPagination(teamId, userId string, page, perPage int) (*model.ChannelMembers, error) AutocompleteInTeam(teamId string, term string, includeDeleted bool) (*model.ChannelList, *model.AppError) AutocompleteInTeamForSearch(teamId string, userId string, term string, includeDeleted bool) (*model.ChannelList, *model.AppError) SearchAllChannels(term string, opts ChannelSearchOpts) (*model.ChannelListWithTeamData, int64, *model.AppError) diff --git a/store/storetest/channel_store.go b/store/storetest/channel_store.go index 20ea05a273..a62a7a61ed 100644 --- a/store/storetest/channel_store.go +++ b/store/storetest/channel_store.go @@ -198,8 +198,8 @@ func testChannelStoreSaveDirectChannel(t *testing.T, ss store.Store, s SqlSuppli _, nErr = ss.Channel().SaveDirectChannel(&o1, &m1, &m2) require.Nil(t, nErr, "couldn't save direct channel", nErr) - members, err := ss.Channel().GetMembers(o1.Id, 0, 100) - require.Nil(t, err) + members, nErr := ss.Channel().GetMembers(o1.Id, 0, 100) + require.Nil(t, nErr) require.Len(t, *members, 2, "should have saved 2 members") _, nErr = ss.Channel().SaveDirectChannel(&o1, &m1, &m2) @@ -234,8 +234,8 @@ func testChannelStoreSaveDirectChannel(t *testing.T, ss store.Store, s SqlSuppli _, nErr = ss.Channel().SaveDirectChannel(&o1, &m1, &m1) require.Nil(t, nErr, "couldn't save direct channel", nErr) - members, err = ss.Channel().GetMembers(o1.Id, 0, 100) - require.Nil(t, err) + members, nErr = ss.Channel().GetMembers(o1.Id, 0, 100) + require.Nil(t, nErr) require.Len(t, *members, 1, "should have saved just 1 member") // Manually truncate Channels table until testlib can handle cleanups @@ -266,8 +266,8 @@ func testChannelStoreCreateDirectChannel(t *testing.T, ss store.Store) { ss.Channel().PermanentDelete(c1.Id) }() - members, err := ss.Channel().GetMembers(c1.Id, 0, 100) - require.Nil(t, err) + members, nErr := ss.Channel().GetMembers(c1.Id, 0, 100) + require.Nil(t, nErr) require.Len(t, *members, 2, "should have saved 2 members") } @@ -838,25 +838,25 @@ func testChannelMemberStore(t *testing.T, ss store.Store) { o1.ChannelId = c1.Id o1.UserId = u1.Id o1.NotifyProps = model.GetDefaultChannelNotifyProps() - _, err = ss.Channel().SaveMember(&o1) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&o1) + require.Nil(t, nErr) o2 := model.ChannelMember{} o2.ChannelId = c1.Id o2.UserId = u2.Id o2.NotifyProps = model.GetDefaultChannelNotifyProps() - _, err = ss.Channel().SaveMember(&o2) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&o2) + require.Nil(t, nErr) c1t2, _ := ss.Channel().Get(c1.Id, false) assert.EqualValues(t, 0, c1t2.ExtraUpdateAt, "ExtraUpdateAt should be 0") - count, err := ss.Channel().GetMemberCount(o1.ChannelId, true) - require.Nil(t, err) + count, nErr := ss.Channel().GetMemberCount(o1.ChannelId, true) + require.Nil(t, nErr) require.EqualValues(t, 2, count, "should have saved 2 members") - count, err = ss.Channel().GetMemberCount(o1.ChannelId, true) - require.Nil(t, err) + count, nErr = ss.Channel().GetMemberCount(o1.ChannelId, true) + require.Nil(t, nErr) require.EqualValues(t, 2, count, "should have saved 2 members") require.EqualValues( t, @@ -870,15 +870,15 @@ func testChannelMemberStore(t *testing.T, ss store.Store) { ss.Channel().GetMemberCountFromCache("junk"), "should have saved 0 members") - count, err = ss.Channel().GetMemberCount(o1.ChannelId, false) - require.Nil(t, err) + count, nErr = ss.Channel().GetMemberCount(o1.ChannelId, false) + require.Nil(t, nErr) require.EqualValues(t, 2, count, "should have saved 2 members") - err = ss.Channel().RemoveMember(o2.ChannelId, o2.UserId) - require.Nil(t, err) + nErr = ss.Channel().RemoveMember(o2.ChannelId, o2.UserId) + require.Nil(t, nErr) - count, err = ss.Channel().GetMemberCount(o1.ChannelId, false) - require.Nil(t, err) + count, nErr = ss.Channel().GetMemberCount(o1.ChannelId, false) + require.Nil(t, nErr) require.EqualValues(t, 1, count, "should have removed 1 member") c1t3, _ := ss.Channel().Get(c1.Id, false) @@ -887,8 +887,8 @@ func testChannelMemberStore(t *testing.T, ss store.Store) { member, _ := ss.Channel().GetMember(o1.ChannelId, o1.UserId) require.Equal(t, o1.ChannelId, member.ChannelId, "should have go member") - _, err = ss.Channel().SaveMember(&o1) - require.NotNil(t, err, "should have been a duplicate") + _, nErr = ss.Channel().SaveMember(&o1) + require.NotNil(t, nErr, "should have been a duplicate") c1t4, _ := ss.Channel().Get(c1.Id, false) assert.EqualValues(t, 0, c1t4.ExtraUpdateAt, "ExtraUpdateAt should be 0") @@ -901,20 +901,22 @@ func testChannelSaveMember(t *testing.T, ss store.Store) { t.Run("not valid channel member", func(t *testing.T) { member := &model.ChannelMember{ChannelId: "wrong", UserId: u1.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMember(member) - require.NotNil(t, err) - require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", err.Id) + _, nErr := ss.Channel().SaveMember(member) + require.NotNil(t, nErr) + var appErr *model.AppError + require.True(t, errors.As(nErr, &appErr)) + require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", appErr.Id) }) t.Run("duplicated entries should fail", func(t *testing.T) { channelID1 := model.NewId() m1 := &model.ChannelMember{ChannelId: channelID1, UserId: u1.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMember(m1) - require.Nil(t, err) + _, nErr := ss.Channel().SaveMember(m1) + require.Nil(t, nErr) m2 := &model.ChannelMember{ChannelId: channelID1, UserId: u1.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMember(m2) - require.NotNil(t, err) - require.Equal(t, "store.sql_channel.save_member.exists.app_error", err.Id) + _, nErr = ss.Channel().SaveMember(m2) + require.NotNil(t, nErr) + require.IsType(t, &store.ErrConflict{}, nErr) }) t.Run("insert member correctly (in channel without channel scheme and team without scheme)", func(t *testing.T) { @@ -1056,8 +1058,8 @@ func testChannelSaveMember(t *testing.T, ss store.Store) { ExplicitRoles: tc.ExplicitRoles, NotifyProps: defaultNotifyProps, } - member, err = ss.Channel().SaveMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().SaveMember(member) + require.Nil(t, nErr) defer ss.Channel().RemoveMember(channel.Id, u1.Id) assert.Equal(t, tc.ExpectedRoles, member.Roles) assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) @@ -1217,8 +1219,8 @@ func testChannelSaveMember(t *testing.T, ss store.Store) { ExplicitRoles: tc.ExplicitRoles, NotifyProps: defaultNotifyProps, } - member, err = ss.Channel().SaveMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().SaveMember(member) + require.Nil(t, nErr) defer ss.Channel().RemoveMember(channel.Id, u1.Id) assert.Equal(t, tc.ExpectedRoles, member.Roles) assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) @@ -1377,8 +1379,8 @@ func testChannelSaveMember(t *testing.T, ss store.Store) { ExplicitRoles: tc.ExplicitRoles, NotifyProps: defaultNotifyProps, } - member, err = ss.Channel().SaveMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().SaveMember(member) + require.Nil(t, nErr) defer ss.Channel().RemoveMember(channel.Id, u1.Id) assert.Equal(t, tc.ExpectedRoles, member.Roles) assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) @@ -1400,18 +1402,20 @@ func testChannelSaveMultipleMembers(t *testing.T, ss store.Store) { t.Run("any not valid channel member", func(t *testing.T) { m1 := &model.ChannelMember{ChannelId: "wrong", UserId: u1.Id, NotifyProps: defaultNotifyProps} m2 := &model.ChannelMember{ChannelId: model.NewId(), UserId: u2.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) - require.NotNil(t, err) - require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", err.Id) + _, nErr := ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) + require.NotNil(t, nErr) + var appErr *model.AppError + require.True(t, errors.As(nErr, &appErr)) + require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", appErr.Id) }) t.Run("duplicated entries should fail", func(t *testing.T) { channelID1 := model.NewId() m1 := &model.ChannelMember{ChannelId: channelID1, UserId: u1.Id, NotifyProps: defaultNotifyProps} m2 := &model.ChannelMember{ChannelId: channelID1, UserId: u1.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) - require.NotNil(t, err) - require.Equal(t, "store.sql_channel.save_member.exists.app_error", err.Id) + _, nErr := ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) + require.NotNil(t, nErr) + require.IsType(t, &store.ErrConflict{}, nErr) }) t.Run("insert members correctly (in channel without channel scheme and team without scheme)", func(t *testing.T) { @@ -1563,8 +1567,8 @@ func testChannelSaveMultipleMembers(t *testing.T, ss store.Store) { NotifyProps: defaultNotifyProps, } var members []*model.ChannelMember - members, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) - require.Nil(t, err) + members, nErr = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) + require.Nil(t, nErr) require.Len(t, members, 2) member = members[0] defer ss.Channel().RemoveMember(channel.Id, u1.Id) @@ -1738,8 +1742,8 @@ func testChannelSaveMultipleMembers(t *testing.T, ss store.Store) { NotifyProps: defaultNotifyProps, } var members []*model.ChannelMember - members, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) - require.Nil(t, err) + members, nErr = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) + require.Nil(t, nErr) require.Len(t, members, 2) member = members[0] defer ss.Channel().RemoveMember(channel.Id, u1.Id) @@ -1935,9 +1939,11 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { t.Run("not valid channel member", func(t *testing.T) { member := &model.ChannelMember{ChannelId: "wrong", UserId: u1.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().UpdateMember(member) - require.NotNil(t, err) - require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", err.Id) + _, nErr := ss.Channel().UpdateMember(member) + require.NotNil(t, nErr) + var appErr *model.AppError + require.True(t, errors.As(nErr, &appErr)) + require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", appErr.Id) }) t.Run("insert member correctly (in channel without channel scheme and team without scheme)", func(t *testing.T) { @@ -1966,8 +1972,8 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { UserId: u1.Id, NotifyProps: defaultNotifyProps, } - member, err = ss.Channel().SaveMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().SaveMember(member) + require.Nil(t, nErr) testCases := []struct { Name string @@ -2082,8 +2088,8 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { member.SchemeUser = tc.SchemeUser member.SchemeAdmin = tc.SchemeAdmin member.ExplicitRoles = tc.ExplicitRoles - member, err = ss.Channel().UpdateMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().UpdateMember(member) + require.Nil(t, nErr) assert.Equal(t, tc.ExpectedRoles, member.Roles) assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) @@ -2129,8 +2135,8 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { UserId: u1.Id, NotifyProps: defaultNotifyProps, } - member, err = ss.Channel().SaveMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().SaveMember(member) + require.Nil(t, nErr) testCases := []struct { Name string @@ -2245,8 +2251,8 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { member.SchemeUser = tc.SchemeUser member.SchemeAdmin = tc.SchemeAdmin member.ExplicitRoles = tc.ExplicitRoles - member, err = ss.Channel().UpdateMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().UpdateMember(member) + require.Nil(t, nErr) assert.Equal(t, tc.ExpectedRoles, member.Roles) assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) @@ -2291,8 +2297,8 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { UserId: u1.Id, NotifyProps: defaultNotifyProps, } - member, err = ss.Channel().SaveMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().SaveMember(member) + require.Nil(t, nErr) testCases := []struct { Name string @@ -2407,8 +2413,8 @@ func testChannelUpdateMember(t *testing.T, ss store.Store) { member.SchemeUser = tc.SchemeUser member.SchemeAdmin = tc.SchemeAdmin member.ExplicitRoles = tc.ExplicitRoles - member, err = ss.Channel().UpdateMember(member) - require.Nil(t, err) + member, nErr = ss.Channel().UpdateMember(member) + require.Nil(t, nErr) assert.Equal(t, tc.ExpectedRoles, member.Roles) assert.Equal(t, tc.ExpectedExplicitRoles, member.ExplicitRoles) assert.Equal(t, tc.ExpectedSchemeGuest, member.SchemeGuest) @@ -2429,18 +2435,20 @@ func testChannelUpdateMultipleMembers(t *testing.T, ss store.Store) { t.Run("any not valid channel member", func(t *testing.T) { m1 := &model.ChannelMember{ChannelId: "wrong", UserId: u1.Id, NotifyProps: defaultNotifyProps} m2 := &model.ChannelMember{ChannelId: model.NewId(), UserId: u2.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) - require.NotNil(t, err) - require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", err.Id) + _, nErr := ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) + require.NotNil(t, nErr) + var appErr *model.AppError + require.True(t, errors.As(nErr, &appErr)) + require.Equal(t, "model.channel_member.is_valid.channel_id.app_error", appErr.Id) }) t.Run("duplicated entries should fail", func(t *testing.T) { channelID1 := model.NewId() m1 := &model.ChannelMember{ChannelId: channelID1, UserId: u1.Id, NotifyProps: defaultNotifyProps} m2 := &model.ChannelMember{ChannelId: channelID1, UserId: u1.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) - require.NotNil(t, err) - require.Equal(t, "store.sql_channel.save_member.exists.app_error", err.Id) + _, nErr := ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) + require.NotNil(t, nErr) + require.IsType(t, &store.ErrConflict{}, nErr) }) t.Run("insert members correctly (in channel without channel scheme and team without scheme)", func(t *testing.T) { @@ -2467,8 +2475,8 @@ func testChannelUpdateMultipleMembers(t *testing.T, ss store.Store) { member := &model.ChannelMember{ChannelId: channel.Id, UserId: u1.Id, NotifyProps: defaultNotifyProps} otherMember := &model.ChannelMember{ChannelId: channel.Id, UserId: u2.Id, NotifyProps: defaultNotifyProps} var members []*model.ChannelMember - members, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) - require.Nil(t, err) + members, nErr = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) + require.Nil(t, nErr) defer ss.Channel().RemoveMember(channel.Id, u1.Id) defer ss.Channel().RemoveMember(channel.Id, u2.Id) require.Len(t, members, 2) @@ -2589,8 +2597,8 @@ func testChannelUpdateMultipleMembers(t *testing.T, ss store.Store) { member.SchemeAdmin = tc.SchemeAdmin member.ExplicitRoles = tc.ExplicitRoles var members []*model.ChannelMember - members, err = ss.Channel().UpdateMultipleMembers([]*model.ChannelMember{member, otherMember}) - require.Nil(t, err) + members, nErr = ss.Channel().UpdateMultipleMembers([]*model.ChannelMember{member, otherMember}) + require.Nil(t, nErr) require.Len(t, members, 2) member = members[0] @@ -2637,8 +2645,8 @@ func testChannelUpdateMultipleMembers(t *testing.T, ss store.Store) { member := &model.ChannelMember{ChannelId: channel.Id, UserId: u1.Id, NotifyProps: defaultNotifyProps} otherMember := &model.ChannelMember{ChannelId: channel.Id, UserId: u2.Id, NotifyProps: defaultNotifyProps} var members []*model.ChannelMember - members, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) - require.Nil(t, err) + members, nErr = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{member, otherMember}) + require.Nil(t, nErr) defer ss.Channel().RemoveMember(channel.Id, u1.Id) defer ss.Channel().RemoveMember(channel.Id, u2.Id) require.Len(t, members, 2) @@ -2759,8 +2767,8 @@ func testChannelUpdateMultipleMembers(t *testing.T, ss store.Store) { member.SchemeAdmin = tc.SchemeAdmin member.ExplicitRoles = tc.ExplicitRoles var members []*model.ChannelMember - members, err = ss.Channel().UpdateMultipleMembers([]*model.ChannelMember{member, otherMember}) - require.Nil(t, err) + members, nErr = ss.Channel().UpdateMultipleMembers([]*model.ChannelMember{member, otherMember}) + require.Nil(t, nErr) require.Len(t, members, 2) member = members[0] @@ -2956,34 +2964,34 @@ func testChannelRemoveMember(t *testing.T, ss store.Store) { m2 := &model.ChannelMember{ChannelId: channelID, UserId: u2.Id, NotifyProps: defaultNotifyProps} m3 := &model.ChannelMember{ChannelId: channelID, UserId: u3.Id, NotifyProps: defaultNotifyProps} m4 := &model.ChannelMember{ChannelId: channelID, UserId: u4.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2, m3, m4}) - require.Nil(t, err) + _, nErr := ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2, m3, m4}) + require.Nil(t, nErr) t.Run("remove member from not existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMember("not-existing-channel", u1.Id) - require.Nil(t, err) + nErr = ss.Channel().RemoveMember("not-existing-channel", u1.Id) + require.Nil(t, nErr) var membersCount int64 - membersCount, err = ss.Channel().GetMemberCount(channelID, false) - require.Nil(t, err) + membersCount, nErr = ss.Channel().GetMemberCount(channelID, false) + require.Nil(t, nErr) require.Equal(t, int64(4), membersCount) }) t.Run("remove not existing member from an existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMember(channelID, model.NewId()) - require.Nil(t, err) + nErr = ss.Channel().RemoveMember(channelID, model.NewId()) + require.Nil(t, nErr) var membersCount int64 - membersCount, err = ss.Channel().GetMemberCount(channelID, false) - require.Nil(t, err) + membersCount, nErr = ss.Channel().GetMemberCount(channelID, false) + require.Nil(t, nErr) require.Equal(t, int64(4), membersCount) }) t.Run("remove existing member from an existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMember(channelID, u1.Id) - require.Nil(t, err) + nErr = ss.Channel().RemoveMember(channelID, u1.Id) + require.Nil(t, nErr) defer ss.Channel().SaveMember(m1) var membersCount int64 - membersCount, err = ss.Channel().GetMemberCount(channelID, false) - require.Nil(t, err) + membersCount, nErr = ss.Channel().GetMemberCount(channelID, false) + require.Nil(t, nErr) require.Equal(t, int64(3), membersCount) }) } @@ -3003,39 +3011,39 @@ func testChannelRemoveMembers(t *testing.T, ss store.Store) { m2 := &model.ChannelMember{ChannelId: channelID, UserId: u2.Id, NotifyProps: defaultNotifyProps} m3 := &model.ChannelMember{ChannelId: channelID, UserId: u3.Id, NotifyProps: defaultNotifyProps} m4 := &model.ChannelMember{ChannelId: channelID, UserId: u4.Id, NotifyProps: defaultNotifyProps} - _, err = ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2, m3, m4}) - require.Nil(t, err) + _, nErr := ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2, m3, m4}) + require.Nil(t, nErr) t.Run("remove members from not existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMembers("not-existing-channel", []string{u1.Id, u2.Id, u3.Id, u4.Id}) - require.Nil(t, err) + nErr = ss.Channel().RemoveMembers("not-existing-channel", []string{u1.Id, u2.Id, u3.Id, u4.Id}) + require.Nil(t, nErr) var membersCount int64 - membersCount, err = ss.Channel().GetMemberCount(channelID, false) - require.Nil(t, err) + membersCount, nErr = ss.Channel().GetMemberCount(channelID, false) + require.Nil(t, nErr) require.Equal(t, int64(4), membersCount) }) t.Run("remove not existing members from an existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMembers(channelID, []string{model.NewId(), model.NewId()}) - require.Nil(t, err) + nErr = ss.Channel().RemoveMembers(channelID, []string{model.NewId(), model.NewId()}) + require.Nil(t, nErr) var membersCount int64 - membersCount, err = ss.Channel().GetMemberCount(channelID, false) - require.Nil(t, err) + membersCount, nErr = ss.Channel().GetMemberCount(channelID, false) + require.Nil(t, nErr) require.Equal(t, int64(4), membersCount) }) t.Run("remove not existing and not existing members from an existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMembers(channelID, []string{u1.Id, u2.Id, model.NewId(), model.NewId()}) - require.Nil(t, err) + nErr = ss.Channel().RemoveMembers(channelID, []string{u1.Id, u2.Id, model.NewId(), model.NewId()}) + require.Nil(t, nErr) defer ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2}) var membersCount int64 - membersCount, err = ss.Channel().GetMemberCount(channelID, false) - require.Nil(t, err) + membersCount, nErr = ss.Channel().GetMemberCount(channelID, false) + require.Nil(t, nErr) require.Equal(t, int64(2), membersCount) }) t.Run("remove existing members from an existing channel", func(t *testing.T) { - err = ss.Channel().RemoveMembers(channelID, []string{u1.Id, u2.Id, u3.Id}) - require.Nil(t, err) + nErr = ss.Channel().RemoveMembers(channelID, []string{u1.Id, u2.Id, u3.Id}) + require.Nil(t, nErr) defer ss.Channel().SaveMultipleMembers([]*model.ChannelMember{m1, m2, m3}) membersCount, err := ss.Channel().GetMemberCount(channelID, false) require.Nil(t, err) @@ -3075,35 +3083,35 @@ func testChannelDeleteMemberStore(t *testing.T, ss store.Store) { o1.ChannelId = c1.Id o1.UserId = u1.Id o1.NotifyProps = model.GetDefaultChannelNotifyProps() - _, err = ss.Channel().SaveMember(&o1) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&o1) + require.Nil(t, nErr) o2 := model.ChannelMember{} o2.ChannelId = c1.Id o2.UserId = u2.Id o2.NotifyProps = model.GetDefaultChannelNotifyProps() - _, err = ss.Channel().SaveMember(&o2) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&o2) + require.Nil(t, nErr) c1t2, _ := ss.Channel().Get(c1.Id, false) assert.EqualValues(t, 0, c1t2.ExtraUpdateAt, "ExtraUpdateAt should be 0") - count, err := ss.Channel().GetMemberCount(o1.ChannelId, false) - require.Nil(t, err) + count, nErr := ss.Channel().GetMemberCount(o1.ChannelId, false) + require.Nil(t, nErr) require.EqualValues(t, 2, count, "should have saved 2 members") - err = ss.Channel().PermanentDeleteMembersByUser(o2.UserId) - require.Nil(t, err) + nErr = ss.Channel().PermanentDeleteMembersByUser(o2.UserId) + require.Nil(t, nErr) - count, err = ss.Channel().GetMemberCount(o1.ChannelId, false) - require.Nil(t, err) + count, nErr = ss.Channel().GetMemberCount(o1.ChannelId, false) + require.Nil(t, nErr) require.EqualValues(t, 1, count, "should have removed 1 member") - err = ss.Channel().PermanentDeleteMembersByChannel(o1.ChannelId) - require.Nil(t, err, err) + nErr = ss.Channel().PermanentDeleteMembersByChannel(o1.ChannelId) + require.Nil(t, nErr) - count, err = ss.Channel().GetMemberCount(o1.ChannelId, false) - require.Nil(t, err) + count, nErr = ss.Channel().GetMemberCount(o1.ChannelId, false) + require.Nil(t, nErr) require.EqualValues(t, 0, count, "should have removed all members") } @@ -4362,8 +4370,8 @@ func testGetMemberCount(t *testing.T, ss store.Store) { UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m1) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m1) + require.Nil(t, nErr) count, channelErr := ss.Channel().GetMemberCount(c1.Id, false) require.Nilf(t, channelErr, "failed to get member count: %v", channelErr) @@ -4383,8 +4391,8 @@ func testGetMemberCount(t *testing.T, ss store.Store) { UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m2) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m2) + require.Nil(t, nErr) count, channelErr = ss.Channel().GetMemberCount(c1.Id, false) require.Nilf(t, channelErr, "failed to get member count: %v", channelErr) @@ -4405,8 +4413,8 @@ func testGetMemberCount(t *testing.T, ss store.Store) { UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m3) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m3) + require.Nil(t, nErr) count, channelErr = ss.Channel().GetMemberCount(c1.Id, false) require.Nilf(t, channelErr, "failed to get member count: %v", channelErr) @@ -4427,11 +4435,11 @@ func testGetMemberCount(t *testing.T, ss store.Store) { UserId: u4.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m4) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m4) + require.Nil(t, nErr) - count, err = ss.Channel().GetMemberCount(c1.Id, false) - require.Nilf(t, err, "failed to get member count: %v", err) + count, nErr = ss.Channel().GetMemberCount(c1.Id, false) + require.Nilf(t, nErr, "failed to get member count: %v", nErr) require.EqualValuesf(t, 2, count, "got incorrect member count %v", count) } @@ -4471,13 +4479,13 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m1) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m1) + require.Nil(t, nErr) t.Run("empty slice for channel with no groups", func(t *testing.T) { - memberCounts, err = ss.Channel().GetMemberCountsByGroup(c1.Id, false) + memberCounts, nErr = ss.Channel().GetMemberCountsByGroup(c1.Id, false) expectedMemberCounts := []*model.ChannelMemberCountByGroup{} - require.Nil(t, err) + require.Nil(t, nErr) require.Equal(t, expectedMemberCounts, memberCounts) }) @@ -4485,7 +4493,7 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { require.Nil(t, err) t.Run("returns memberCountsByGroup without timezones", func(t *testing.T) { - memberCounts, err = ss.Channel().GetMemberCountsByGroup(c1.Id, false) + memberCounts, nErr = ss.Channel().GetMemberCountsByGroup(c1.Id, false) expectedMemberCounts := []*model.ChannelMemberCountByGroup{ { GroupId: g1.Id, @@ -4493,12 +4501,12 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { ChannelMemberTimezonesCount: 0, }, } - require.Nil(t, err) + require.Nil(t, nErr) require.Equal(t, expectedMemberCounts, memberCounts) }) t.Run("returns memberCountsByGroup with timezones when no timezones set", func(t *testing.T) { - memberCounts, err = ss.Channel().GetMemberCountsByGroup(c1.Id, true) + memberCounts, nErr = ss.Channel().GetMemberCountsByGroup(c1.Id, true) expectedMemberCounts := []*model.ChannelMemberCountByGroup{ { GroupId: g1.Id, @@ -4506,7 +4514,7 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { ChannelMemberTimezonesCount: 0, }, } - require.Nil(t, err) + require.Nil(t, nErr) require.Equal(t, expectedMemberCounts, memberCounts) }) @@ -4542,8 +4550,8 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { UserId: u.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m) + require.Nil(t, nErr) _, err = ss.Group().UpsertMember(g2.Id, u.Id) require.Nil(t, err) @@ -4593,15 +4601,15 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { UserId: u.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), } - _, err = ss.Channel().SaveMember(&m) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m) + require.Nil(t, nErr) _, err = ss.Group().UpsertMember(g3.Id, u.Id) require.Nil(t, err) } t.Run("returns memberCountsByGroup for multiple groups with lots of users without timezones", func(t *testing.T) { - memberCounts, err = ss.Channel().GetMemberCountsByGroup(c1.Id, false) + memberCounts, nErr = ss.Channel().GetMemberCountsByGroup(c1.Id, false) expectedMemberCounts := []*model.ChannelMemberCountByGroup{ { GroupId: g1.Id, @@ -4619,12 +4627,12 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { ChannelMemberTimezonesCount: 0, }, } - require.Nil(t, err) + require.Nil(t, nErr) require.ElementsMatch(t, expectedMemberCounts, memberCounts) }) t.Run("returns memberCountsByGroup for multiple groups with lots of users with timezones", func(t *testing.T) { - memberCounts, err = ss.Channel().GetMemberCountsByGroup(c1.Id, true) + memberCounts, nErr = ss.Channel().GetMemberCountsByGroup(c1.Id, true) expectedMemberCounts := []*model.ChannelMemberCountByGroup{ { GroupId: g1.Id, @@ -4642,7 +4650,7 @@ func testGetMemberCountsByGroup(t *testing.T, ss store.Store) { ChannelMemberTimezonesCount: 3, }, } - require.Nil(t, err) + require.Nil(t, nErr) require.ElementsMatch(t, expectedMemberCounts, memberCounts) }) } @@ -4685,8 +4693,8 @@ func testGetGuestCount(t *testing.T, ss store.Store) { NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeGuest: false, } - _, err = ss.Channel().SaveMember(&m1) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m1) + require.Nil(t, nErr) count, channelErr := ss.Channel().GetGuestCount(c1.Id, false) require.Nil(t, channelErr) @@ -4710,8 +4718,8 @@ func testGetGuestCount(t *testing.T, ss store.Store) { NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeGuest: true, } - _, err = ss.Channel().SaveMember(&m2) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m2) + require.Nil(t, nErr) count, channelErr := ss.Channel().GetGuestCount(c1.Id, false) require.Nil(t, channelErr) @@ -4735,8 +4743,8 @@ func testGetGuestCount(t *testing.T, ss store.Store) { NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeGuest: true, } - _, err = ss.Channel().SaveMember(&m3) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m3) + require.Nil(t, nErr) count, channelErr := ss.Channel().GetGuestCount(c1.Id, false) require.Nil(t, channelErr) @@ -4760,8 +4768,8 @@ func testGetGuestCount(t *testing.T, ss store.Store) { NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeGuest: true, } - _, err = ss.Channel().SaveMember(&m4) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m4) + require.Nil(t, nErr) count, channelErr := ss.Channel().GetGuestCount(c1.Id, false) require.Nil(t, channelErr) @@ -5554,12 +5562,12 @@ func testChannelStoreSearchGroupChannels(t *testing.T, ss store.Store) { require.Nil(t, nErr) for _, userId := range userIds { - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: gc1.Id, UserId: userId, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) } userIds = []string{u1.Id, u4.Id} diff --git a/store/storetest/channel_store_categories.go b/store/storetest/channel_store_categories.go index 5127c66179..a6586fb9ef 100644 --- a/store/storetest/channel_store_categories.go +++ b/store/storetest/channel_store_categories.go @@ -535,12 +535,12 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlSupplier) { Type: model.CHANNEL_PRIVATE, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) channel2, nErr := ss.Channel().Save(&model.Channel{ Name: "channel2", @@ -549,12 +549,12 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlSupplier) { Type: model.CHANNEL_OPEN, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) // Confirm that they're not in the Channels category in the DB count, countErr := s.GetMaster().SelectInt(` @@ -597,12 +597,12 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlSupplier) { }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) // Ensure that no channels are returned res, err := ss.Channel().GetSidebarCategory(channelsCategory.Id) @@ -636,12 +636,12 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlSupplier) { Type: model.CHANNEL_PRIVATE, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) channel2, nErr := ss.Channel().Save(&model.Channel{ Name: "channel2", @@ -650,12 +650,12 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlSupplier) { Type: model.CHANNEL_OPEN, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) // And assign one to another category _, err = ss.Channel().UpdateSidebarCategories(userId, teamId, []*model.SidebarCategoryWithChannels{ @@ -735,12 +735,12 @@ func testGetSidebarCategory(t *testing.T, ss store.Store, s SqlSupplier) { Type: model.CHANNEL_GROUP, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: gmChannel.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) // Ensure that the DM is returned res, err := ss.Channel().GetSidebarCategory(dmsCategory.Id) @@ -989,12 +989,12 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { TeamId: teamId, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) // Assign it to favorites _, err = ss.Channel().UpdateSidebarCategories(userId, teamId, []*model.SidebarCategoryWithChannels{ @@ -1229,18 +1229,18 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { TeamId: teamId, }, 10) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId, ChannelId: channel.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + require.Nil(t, nErr) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ UserId: userId2, ChannelId: channel.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) // Have user1 favorite it _, err = ss.Channel().UpdateSidebarCategories(userId, teamId, []*model.SidebarCategoryWithChannels{ diff --git a/store/storetest/group_store.go b/store/storetest/group_store.go index f1668a018d..5eea2c94f7 100644 --- a/store/storetest/group_store.go +++ b/store/storetest/group_store.go @@ -1875,12 +1875,12 @@ func testTeamMembersToRemove(t *testing.T, ss store.Store) { require.Nil(t, res) res = ss.Team().RemoveMember(data.ConstrainedTeam.Id, data.UserC.Id) require.Nil(t, res) - err = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserA.Id) - require.Nil(t, err) - err = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserB.Id) - require.Nil(t, err) - err = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserC.Id) - require.Nil(t, err) + nErr = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserA.Id) + require.Nil(t, nErr) + nErr = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserB.Id) + require.Nil(t, nErr) + nErr = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserC.Id) + require.Nil(t, nErr) } func testTeamMembersToRemoveSingleTeam(t *testing.T, ss store.Store) { @@ -2027,12 +2027,12 @@ func testChannelMembersToRemove(t *testing.T, ss store.Store) { require.Nil(t, res) res = ss.Team().RemoveMember(data.ConstrainedTeam.Id, data.UserC.Id) require.Nil(t, res) - err = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserA.Id) - require.Nil(t, err) - err = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserB.Id) - require.Nil(t, err) - err = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserC.Id) - require.Nil(t, err) + nErr = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserA.Id) + require.Nil(t, nErr) + nErr = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserB.Id) + require.Nil(t, nErr) + nErr = ss.Channel().RemoveMember(data.ConstrainedChannel.Id, data.UserC.Id) + require.Nil(t, nErr) } func testChannelMembersToRemoveSingleChannel(t *testing.T, ss store.Store) { @@ -2076,20 +2076,20 @@ func testChannelMembersToRemoveSingleChannel(t *testing.T, ss store.Store) { require.Nil(t, nErr) for _, user := range []*model.User{user1, user2} { - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: channel1.Id, UserId: user.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) } - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: channel2.Id, UserId: user3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) channelMembers, err := ss.Group().ChannelMembersToRemove(nil) require.Nil(t, err) diff --git a/store/storetest/mocks/ChannelStore.go b/store/storetest/mocks/ChannelStore.go index 04531e0fe1..92a8dbfe47 100644 --- a/store/storetest/mocks/ChannelStore.go +++ b/store/storetest/mocks/ChannelStore.go @@ -39,7 +39,7 @@ func (_m *ChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType str } // AnalyticsTypeCount provides a mock function with given fields: teamId, channelType -func (_m *ChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, *model.AppError) { +func (_m *ChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, error) { ret := _m.Called(teamId, channelType) var r0 int64 @@ -49,13 +49,11 @@ func (_m *ChannelStore) AnalyticsTypeCount(teamId string, channelType string) (i r0 = ret.Get(0).(int64) } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, string) error); ok { r1 = rf(teamId, channelType) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -147,7 +145,7 @@ func (_m *ChannelStore) ClearSidebarOnTeamLeave(userId string, teamId string) er } // CountPostsAfter provides a mock function with given fields: channelId, timestamp, userId -func (_m *ChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, *model.AppError) { +func (_m *ChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, error) { ret := _m.Called(channelId, timestamp, userId) var r0 int @@ -157,13 +155,11 @@ func (_m *ChannelStore) CountPostsAfter(channelId string, timestamp int64, userI r0 = ret.Get(0).(int) } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, int64, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, int64, string) error); ok { r1 = rf(channelId, timestamp, userId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -322,7 +318,7 @@ func (_m *ChannelStore) GetAll(teamId string) ([]*model.Channel, error) { } // GetAllChannelMembersForUser provides a mock function with given fields: userId, allowFromCache, includeDeleted -func (_m *ChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, *model.AppError) { +func (_m *ChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, error) { ret := _m.Called(userId, allowFromCache, includeDeleted) var r0 map[string]string @@ -334,20 +330,18 @@ func (_m *ChannelStore) GetAllChannelMembersForUser(userId string, allowFromCach } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, bool, bool) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, bool, bool) error); ok { r1 = rf(userId, allowFromCache, includeDeleted) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetAllChannelMembersNotifyPropsForChannel provides a mock function with given fields: channelId, allowFromCache -func (_m *ChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, *model.AppError) { +func (_m *ChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, error) { ret := _m.Called(channelId, allowFromCache) var r0 map[string]model.StringMap @@ -359,13 +353,11 @@ func (_m *ChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId stri } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, bool) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, bool) error); ok { r1 = rf(channelId, allowFromCache) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -583,7 +575,7 @@ func (_m *ChannelStore) GetChannelMembersForExport(userId string, teamId string) } // GetChannelMembersTimezones provides a mock function with given fields: channelId -func (_m *ChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { +func (_m *ChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, error) { ret := _m.Called(channelId) var r0 []model.StringMap @@ -595,13 +587,11 @@ func (_m *ChannelStore) GetChannelMembersTimezones(channelId string) ([]model.St } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string) error); ok { r1 = rf(channelId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -821,7 +811,7 @@ func (_m *ChannelStore) GetFromMaster(id string) (*model.Channel, error) { } // GetGuestCount provides a mock function with given fields: channelId, allowFromCache -func (_m *ChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (_m *ChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { ret := _m.Called(channelId, allowFromCache) var r0 int64 @@ -831,20 +821,18 @@ func (_m *ChannelStore) GetGuestCount(channelId string, allowFromCache bool) (in r0 = ret.Get(0).(int64) } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, bool) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, bool) error); ok { r1 = rf(channelId, allowFromCache) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetMember provides a mock function with given fields: channelId, userId -func (_m *ChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { +func (_m *ChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, error) { ret := _m.Called(channelId, userId) var r0 *model.ChannelMember @@ -856,20 +844,18 @@ func (_m *ChannelStore) GetMember(channelId string, userId string) (*model.Chann } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, string) error); ok { r1 = rf(channelId, userId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetMemberCount provides a mock function with given fields: channelId, allowFromCache -func (_m *ChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (_m *ChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { ret := _m.Called(channelId, allowFromCache) var r0 int64 @@ -879,13 +865,11 @@ func (_m *ChannelStore) GetMemberCount(channelId string, allowFromCache bool) (i r0 = ret.Get(0).(int64) } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, bool) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, bool) error); ok { r1 = rf(channelId, allowFromCache) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -906,7 +890,7 @@ func (_m *ChannelStore) GetMemberCountFromCache(channelId string) int64 { } // GetMemberCountsByGroup provides a mock function with given fields: channelID, includeTimezones -func (_m *ChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) { +func (_m *ChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) { ret := _m.Called(channelID, includeTimezones) var r0 []*model.ChannelMemberCountByGroup @@ -918,20 +902,18 @@ func (_m *ChannelStore) GetMemberCountsByGroup(channelID string, includeTimezone } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, bool) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, bool) error); ok { r1 = rf(channelID, includeTimezones) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetMemberForPost provides a mock function with given fields: postId, userId -func (_m *ChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, *model.AppError) { +func (_m *ChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, error) { ret := _m.Called(postId, userId) var r0 *model.ChannelMember @@ -943,20 +925,18 @@ func (_m *ChannelStore) GetMemberForPost(postId string, userId string) (*model.C } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, string) error); ok { r1 = rf(postId, userId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetMembers provides a mock function with given fields: channelId, offset, limit -func (_m *ChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, *model.AppError) { +func (_m *ChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, error) { ret := _m.Called(channelId, offset, limit) var r0 *model.ChannelMembers @@ -968,13 +948,11 @@ func (_m *ChannelStore) GetMembers(channelId string, offset int, limit int) (*mo } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, int, int) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, int, int) error); ok { r1 = rf(channelId, offset, limit) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -1006,7 +984,7 @@ func (_m *ChannelStore) GetMembersByIds(channelId string, userIds []string) (*mo } // GetMembersForUser provides a mock function with given fields: teamId, userId -func (_m *ChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { +func (_m *ChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, error) { ret := _m.Called(teamId, userId) var r0 *model.ChannelMembers @@ -1018,20 +996,18 @@ func (_m *ChannelStore) GetMembersForUser(teamId string, userId string) (*model. } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, string) error); ok { r1 = rf(teamId, userId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetMembersForUserWithPagination provides a mock function with given fields: teamId, userId, page, perPage -func (_m *ChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, *model.AppError) { +func (_m *ChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, error) { ret := _m.Called(teamId, userId, page, perPage) var r0 *model.ChannelMembers @@ -1043,13 +1019,11 @@ func (_m *ChannelStore) GetMembersForUserWithPagination(teamId string, userId st } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, string, int, int) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, string, int, int) error); ok { r1 = rf(teamId, userId, page, perPage) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -1079,7 +1053,7 @@ func (_m *ChannelStore) GetMoreChannels(teamId string, userId string, offset int } // GetPinnedPostCount provides a mock function with given fields: channelId, allowFromCache -func (_m *ChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (_m *ChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { ret := _m.Called(channelId, allowFromCache) var r0 int64 @@ -1089,20 +1063,18 @@ func (_m *ChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool r0 = ret.Get(0).(int64) } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, bool) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, bool) error); ok { r1 = rf(channelId, allowFromCache) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetPinnedPosts provides a mock function with given fields: channelId -func (_m *ChannelStore) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) { +func (_m *ChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) { ret := _m.Called(channelId) var r0 *model.PostList @@ -1114,13 +1086,11 @@ func (_m *ChannelStore) GetPinnedPosts(channelId string) (*model.PostList, *mode } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string) error); ok { r1 = rf(channelId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -1317,16 +1287,14 @@ func (_m *ChannelStore) GroupSyncedChannelCount() (int64, *model.AppError) { } // IncrementMentionCount provides a mock function with given fields: channelId, userId -func (_m *ChannelStore) IncrementMentionCount(channelId string, userId string) *model.AppError { +func (_m *ChannelStore) IncrementMentionCount(channelId string, userId string) error { ret := _m.Called(channelId, userId) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(string, string) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { r0 = rf(channelId, userId) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 @@ -1449,32 +1417,28 @@ func (_m *ChannelStore) PermanentDeleteByTeam(teamId string) error { } // PermanentDeleteMembersByChannel provides a mock function with given fields: channelId -func (_m *ChannelStore) PermanentDeleteMembersByChannel(channelId string) *model.AppError { +func (_m *ChannelStore) PermanentDeleteMembersByChannel(channelId string) error { ret := _m.Called(channelId) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(string) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { r0 = rf(channelId) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 } // PermanentDeleteMembersByUser provides a mock function with given fields: userId -func (_m *ChannelStore) PermanentDeleteMembersByUser(userId string) *model.AppError { +func (_m *ChannelStore) PermanentDeleteMembersByUser(userId string) error { ret := _m.Called(userId) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(string) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { r0 = rf(userId) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 @@ -1497,32 +1461,28 @@ func (_m *ChannelStore) RemoveAllDeactivatedMembers(channelId string) *model.App } // RemoveMember provides a mock function with given fields: channelId, userId -func (_m *ChannelStore) RemoveMember(channelId string, userId string) *model.AppError { +func (_m *ChannelStore) RemoveMember(channelId string, userId string) error { ret := _m.Called(channelId, userId) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(string, string) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { r0 = rf(channelId, userId) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 } // RemoveMembers provides a mock function with given fields: channelId, userIds -func (_m *ChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { +func (_m *ChannelStore) RemoveMembers(channelId string, userIds []string) error { ret := _m.Called(channelId, userIds) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(string, []string) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(string, []string) error); ok { r0 = rf(channelId, userIds) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 @@ -1605,7 +1565,7 @@ func (_m *ChannelStore) SaveDirectChannel(channel *model.Channel, member1 *model } // SaveMember provides a mock function with given fields: member -func (_m *ChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (_m *ChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) { ret := _m.Called(member) var r0 *model.ChannelMember @@ -1617,20 +1577,18 @@ func (_m *ChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelM } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(*model.ChannelMember) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(*model.ChannelMember) error); ok { r1 = rf(member) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // SaveMultipleMembers provides a mock function with given fields: members -func (_m *ChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (_m *ChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { ret := _m.Called(members) var r0 []*model.ChannelMember @@ -1642,13 +1600,11 @@ func (_m *ChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]* } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func([]*model.ChannelMember) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func([]*model.ChannelMember) error); ok { r1 = rf(members) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -1849,7 +1805,7 @@ func (_m *ChannelStore) Update(channel *model.Channel) (*model.Channel, error) { } // UpdateLastViewedAt provides a mock function with given fields: channelIds, userId -func (_m *ChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, *model.AppError) { +func (_m *ChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, error) { ret := _m.Called(channelIds, userId) var r0 map[string]int64 @@ -1861,20 +1817,18 @@ func (_m *ChannelStore) UpdateLastViewedAt(channelIds []string, userId string) ( } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func([]string, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func([]string, string) error); ok { r1 = rf(channelIds, userId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // UpdateLastViewedAtPost provides a mock function with given fields: unreadPost, userID, mentionCount -func (_m *ChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, *model.AppError) { +func (_m *ChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, error) { ret := _m.Called(unreadPost, userID, mentionCount) var r0 *model.ChannelUnreadAt @@ -1886,20 +1840,18 @@ func (_m *ChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID st } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(*model.Post, string, int) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(*model.Post, string, int) error); ok { r1 = rf(unreadPost, userID, mentionCount) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // UpdateMember provides a mock function with given fields: member -func (_m *ChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (_m *ChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) { ret := _m.Called(member) var r0 *model.ChannelMember @@ -1911,13 +1863,11 @@ func (_m *ChannelStore) UpdateMember(member *model.ChannelMember) (*model.Channe } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(*model.ChannelMember) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(*model.ChannelMember) error); ok { r1 = rf(member) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 @@ -1940,7 +1890,7 @@ func (_m *ChannelStore) UpdateMembersRole(channelID string, userIDs []string) *m } // UpdateMultipleMembers provides a mock function with given fields: members -func (_m *ChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (_m *ChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { ret := _m.Called(members) var r0 []*model.ChannelMember @@ -1952,13 +1902,11 @@ func (_m *ChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([ } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func([]*model.ChannelMember) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func([]*model.ChannelMember) error); ok { r1 = rf(members) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 diff --git a/store/storetest/user_store.go b/store/storetest/user_store.go index c8f88c7ecc..1e968c714d 100644 --- a/store/storetest/user_store.go +++ b/store/storetest/user_store.go @@ -774,33 +774,33 @@ func testUserStoreGetProfilesInChannel(t *testing.T, ss store.Store) { c2, nErr := ss.Channel().Save(ch2, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) t.Run("get in channel 1, offset 0, limit 100", func(t *testing.T) { users, err := ss.User().GetProfilesInChannel(c1.Id, 0, 100) require.Nil(t, err) @@ -879,33 +879,33 @@ func testUserStoreGetProfilesInChannelByStatus(t *testing.T, ss store.Store, s S c2, nErr := ss.Channel().Save(ch2, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) require.Nil(t, ss.Status().SaveOrUpdate(&model.Status{ UserId: u1.Id, Status: model.STATUS_DND, @@ -1055,35 +1055,33 @@ func testUserStoreGetAllProfilesInChannel(t *testing.T, ss store.Store) { c2, nErr := ss.Channel().Save(ch2, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - if err != nil { - panic(err) - } + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) t.Run("all profiles in channel 1, no caching", func(t *testing.T) { var profiles map[string]*model.User @@ -1205,35 +1203,34 @@ func testUserStoreGetProfilesNotInChannel(t *testing.T, ss store.Store) { }, profiles) }) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - if err != nil { - panic(err) - } + require.Nil(t, nErr) + t.Run("get team 1, channel 1, offset 0, limit 100, after update", func(t *testing.T) { var profiles []*model.User profiles, err = ss.User().GetProfilesNotInChannel(teamId, c1.Id, false, 0, 100, nil) @@ -1413,12 +1410,12 @@ func testUserStoreGetProfileByGroupChannelIdsForUser(t *testing.T, ss store.Stor require.Nil(t, nErr) for _, uId := range []string{u1.Id, u2.Id, u3.Id} { - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: gc1.Id, UserId: uId, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) } gc2, nErr := ss.Channel().Save(&model.Channel{ @@ -1429,12 +1426,12 @@ func testUserStoreGetProfileByGroupChannelIdsForUser(t *testing.T, ss store.Stor require.Nil(t, nErr) for _, uId := range []string{u1.Id, u3.Id, u4.Id} { - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: gc2.Id, UserId: uId, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) } testCases := []struct { @@ -2040,8 +2037,8 @@ func testUserUnreadCount(t *testing.T, ss store.Store) { m2.UserId = u2.Id m2.NotifyProps = model.GetDefaultChannelNotifyProps() - _, err = ss.Channel().SaveMember(&m2) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&m2) + require.Nil(t, nErr) m1.ChannelId = c2.Id m2.ChannelId = c2.Id @@ -2057,8 +2054,8 @@ func testUserUnreadCount(t *testing.T, ss store.Store) { // Post one message with mention to open channel _, nErr = ss.Post().Save(&p1) require.Nil(t, nErr) - err = ss.Channel().IncrementMentionCount(c1.Id, u2.Id) - require.Nil(t, err) + nErr = ss.Channel().IncrementMentionCount(c1.Id, u2.Id) + require.Nil(t, nErr) // Post 2 messages without mention to direct channel p2 := model.Post{} @@ -2068,8 +2065,8 @@ func testUserUnreadCount(t *testing.T, ss store.Store) { _, nErr = ss.Post().Save(&p2) require.Nil(t, nErr) - err = ss.Channel().IncrementMentionCount(c2.Id, u2.Id) - require.Nil(t, err) + nErr = ss.Channel().IncrementMentionCount(c2.Id, u2.Id) + require.Nil(t, nErr) p3 := model.Post{} p3.ChannelId = c2.Id @@ -2078,8 +2075,8 @@ func testUserUnreadCount(t *testing.T, ss store.Store) { _, nErr = ss.Post().Save(&p3) require.Nil(t, nErr) - err = ss.Channel().IncrementMentionCount(c2.Id, u2.Id) - require.Nil(t, err) + nErr = ss.Channel().IncrementMentionCount(c2.Id, u2.Id) + require.Nil(t, nErr) badge, unreadCountErr := ss.User().GetUnreadCount(u2.Id) require.Nil(t, unreadCountErr) @@ -2523,24 +2520,24 @@ func testUserStoreSearchNotInChannel(t *testing.T, ss store.Store) { c2, nErr := ss.Channel().Save(&ch2, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + require.Nil(t, nErr) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + require.Nil(t, nErr) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) testCases := []struct { Description string @@ -2752,30 +2749,30 @@ func testUserStoreSearchInChannel(t *testing.T, ss store.Store) { c2, nErr := ss.Channel().Save(&ch2, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeAdmin: true, SchemeUser: true, }) - require.Nil(t, err) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + require.Nil(t, nErr) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeAdmin: false, SchemeUser: true, }) - require.Nil(t, err) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + require.Nil(t, nErr) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), SchemeAdmin: false, SchemeUser: true, }) - require.Nil(t, err) + require.Nil(t, nErr) testCases := []struct { Description string @@ -3361,8 +3358,8 @@ func testCount(t *testing.T, ss store.Store) { defer func() { require.Nil(t, ss.User().PermanentDelete(regularUser.Id)) }() _, nErr := ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: regularUser.Id, SchemeAdmin: false, SchemeUser: true}, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{UserId: regularUser.Id, ChannelId: channelId, SchemeAdmin: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{UserId: regularUser.Id, ChannelId: channelId, SchemeAdmin: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) guestUser := &model.User{} guestUser.Email = MakeEmail() @@ -3372,8 +3369,8 @@ func testCount(t *testing.T, ss store.Store) { defer func() { require.Nil(t, ss.User().PermanentDelete(guestUser.Id)) }() _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: guestUser.Id, SchemeAdmin: false, SchemeUser: false, SchemeGuest: true}, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{UserId: guestUser.Id, ChannelId: channelId, SchemeAdmin: false, SchemeUser: false, SchemeGuest: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{UserId: guestUser.Id, ChannelId: channelId, SchemeAdmin: false, SchemeUser: false, SchemeGuest: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) teamAdmin := &model.User{} teamAdmin.Email = MakeEmail() @@ -3383,8 +3380,8 @@ func testCount(t *testing.T, ss store.Store) { defer func() { require.Nil(t, ss.User().PermanentDelete(teamAdmin.Id)) }() _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: teamAdmin.Id, SchemeAdmin: true, SchemeUser: true}, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{UserId: teamAdmin.Id, ChannelId: channelId, SchemeAdmin: true, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{UserId: teamAdmin.Id, ChannelId: channelId, SchemeAdmin: true, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) sysAdmin := &model.User{} sysAdmin.Email = MakeEmail() @@ -3394,8 +3391,8 @@ func testCount(t *testing.T, ss store.Store) { defer func() { require.Nil(t, ss.User().PermanentDelete(sysAdmin.Id)) }() _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: sysAdmin.Id, SchemeAdmin: false, SchemeUser: true}, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{UserId: sysAdmin.Id, ChannelId: channelId, SchemeAdmin: true, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{UserId: sysAdmin.Id, ChannelId: channelId, SchemeAdmin: true, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) // Deleted deletedUser := &model.User{} @@ -4522,8 +4519,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().PromoteGuestToUser(user.Id) require.Nil(t, err) @@ -4537,8 +4534,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeGuest) require.True(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.False(t, updatedChannelMember.SchemeGuest) require.True(t, updatedChannelMember.SchemeUser) }) @@ -4568,8 +4565,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().PromoteGuestToUser(user.Id) require.Nil(t, err) @@ -4582,8 +4579,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeGuest) require.True(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.False(t, updatedChannelMember.SchemeGuest) require.True(t, updatedChannelMember.SchemeUser) }) @@ -4664,8 +4661,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().PromoteGuestToUser(user.Id) require.Nil(t, err) @@ -4678,8 +4675,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeGuest) require.True(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.False(t, updatedChannelMember.SchemeGuest) require.True(t, updatedChannelMember.SchemeUser) }) @@ -4709,8 +4706,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().PromoteGuestToUser(user.Id) require.Nil(t, err) @@ -4723,8 +4720,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeGuest) require.True(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.False(t, updatedChannelMember.SchemeGuest) require.True(t, updatedChannelMember.SchemeUser) }) @@ -4755,8 +4752,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user1.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user1.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) id = model.NewId() user2, err := ss.User().Save(&model.User{ @@ -4775,8 +4772,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId2, UserId: user2.Id, SchemeGuest: true, SchemeUser: false}, 999) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user2.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user2.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().PromoteGuestToUser(user1.Id) require.Nil(t, err) @@ -4789,8 +4786,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeGuest) require.True(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user1.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user1.Id) + require.Nil(t, nErr) require.False(t, updatedChannelMember.SchemeGuest) require.True(t, updatedChannelMember.SchemeUser) @@ -4803,8 +4800,8 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.True(t, notUpdatedTeamMember.SchemeGuest) require.False(t, notUpdatedTeamMember.SchemeUser) - notUpdatedChannelMember, err := ss.Channel().GetMember(channel.Id, user2.Id) - require.Nil(t, err) + notUpdatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user2.Id) + require.Nil(t, nErr) require.True(t, notUpdatedChannelMember.SchemeGuest) require.False(t, notUpdatedChannelMember.SchemeUser) }) @@ -4837,8 +4834,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().DemoteUserToGuest(user.Id) require.Nil(t, err) @@ -4852,8 +4849,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.True(t, updatedTeamMember.SchemeGuest) require.False(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) }) @@ -4883,8 +4880,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: true, SchemeUser: false, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().DemoteUserToGuest(user.Id) require.Nil(t, err) @@ -4897,8 +4894,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.True(t, updatedTeamMember.SchemeGuest) require.False(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) }) @@ -4979,8 +4976,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().DemoteUserToGuest(user.Id) require.Nil(t, err) @@ -4993,8 +4990,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.True(t, updatedTeamMember.SchemeGuest) require.False(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) }) @@ -5024,8 +5021,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { Type: model.CHANNEL_OPEN, }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().DemoteUserToGuest(user.Id) require.Nil(t, err) @@ -5038,8 +5035,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.True(t, updatedTeamMember.SchemeGuest) require.False(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user.Id) + require.Nil(t, nErr) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) }) @@ -5070,8 +5067,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { }, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user1.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user1.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) id = model.NewId() user2, err := ss.User().Save(&model.User{ @@ -5090,8 +5087,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { _, nErr = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId2, UserId: user2.Id, SchemeGuest: false, SchemeUser: true}, 999) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user2.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) - require.Nil(t, err) + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ChannelId: channel.Id, UserId: user2.Id, SchemeGuest: false, SchemeUser: true, NotifyProps: model.GetDefaultChannelNotifyProps()}) + require.Nil(t, nErr) err = ss.User().DemoteUserToGuest(user1.Id) require.Nil(t, err) @@ -5104,8 +5101,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.True(t, updatedTeamMember.SchemeGuest) require.False(t, updatedTeamMember.SchemeUser) - updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user1.Id) - require.Nil(t, err) + updatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user1.Id) + require.Nil(t, nErr) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) @@ -5118,8 +5115,8 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.False(t, notUpdatedTeamMember.SchemeGuest) require.True(t, notUpdatedTeamMember.SchemeUser) - notUpdatedChannelMember, err := ss.Channel().GetMember(channel.Id, user2.Id) - require.Nil(t, err) + notUpdatedChannelMember, nErr := ss.Channel().GetMember(channel.Id, user2.Id) + require.Nil(t, nErr) require.False(t, notUpdatedChannelMember.SchemeGuest) require.True(t, notUpdatedChannelMember.SchemeUser) }) @@ -5311,40 +5308,40 @@ func testGetKnownUsers(t *testing.T, ss store.Store) { c3, nErr := ss.Channel().Save(ch3, -1) require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c1.Id, UserId: u2.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u3.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c2.Id, UserId: u1.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) - _, err = ss.Channel().SaveMember(&model.ChannelMember{ + _, nErr = ss.Channel().SaveMember(&model.ChannelMember{ ChannelId: c3.Id, UserId: u4.Id, NotifyProps: model.GetDefaultChannelNotifyProps(), }) - require.Nil(t, err) + require.Nil(t, nErr) t.Run("get know users sharing no channels", func(t *testing.T) { userIds, err := ss.User().GetKnownUsers(u4.Id) diff --git a/store/timerlayer/timerlayer.go b/store/timerlayer/timerlayer.go index f1ef154357..e286d65148 100644 --- a/store/timerlayer/timerlayer.go +++ b/store/timerlayer/timerlayer.go @@ -474,7 +474,7 @@ func (s *TimerLayerChannelStore) AnalyticsDeletedTypeCount(teamId string, channe return result, err } -func (s *TimerLayerChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, *model.AppError) { +func (s *TimerLayerChannelStore) AnalyticsTypeCount(teamId string, channelType string) (int64, error) { start := timemodule.Now() result, err := s.ChannelStore.AnalyticsTypeCount(teamId, channelType) @@ -569,7 +569,7 @@ func (s *TimerLayerChannelStore) ClearSidebarOnTeamLeave(userId string, teamId s return err } -func (s *TimerLayerChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, *model.AppError) { +func (s *TimerLayerChannelStore) CountPostsAfter(channelId string, timestamp int64, userId string) (int, error) { start := timemodule.Now() result, err := s.ChannelStore.CountPostsAfter(channelId, timestamp, userId) @@ -713,7 +713,7 @@ func (s *TimerLayerChannelStore) GetAll(teamId string) ([]*model.Channel, error) return result, err } -func (s *TimerLayerChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, *model.AppError) { +func (s *TimerLayerChannelStore) GetAllChannelMembersForUser(userId string, allowFromCache bool, includeDeleted bool) (map[string]string, error) { start := timemodule.Now() result, err := s.ChannelStore.GetAllChannelMembersForUser(userId, allowFromCache, includeDeleted) @@ -729,7 +729,7 @@ func (s *TimerLayerChannelStore) GetAllChannelMembersForUser(userId string, allo return result, err } -func (s *TimerLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, *model.AppError) { +func (s *TimerLayerChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId string, allowFromCache bool) (map[string]model.StringMap, error) { start := timemodule.Now() result, err := s.ChannelStore.GetAllChannelMembersNotifyPropsForChannel(channelId, allowFromCache) @@ -889,7 +889,7 @@ func (s *TimerLayerChannelStore) GetChannelMembersForExport(userId string, teamI return result, err } -func (s *TimerLayerChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, *model.AppError) { +func (s *TimerLayerChannelStore) GetChannelMembersTimezones(channelId string) ([]model.StringMap, error) { start := timemodule.Now() result, err := s.ChannelStore.GetChannelMembersTimezones(channelId) @@ -1049,7 +1049,7 @@ func (s *TimerLayerChannelStore) GetFromMaster(id string) (*model.Channel, error return result, err } -func (s *TimerLayerChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *TimerLayerChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { start := timemodule.Now() result, err := s.ChannelStore.GetGuestCount(channelId, allowFromCache) @@ -1065,7 +1065,7 @@ func (s *TimerLayerChannelStore) GetGuestCount(channelId string, allowFromCache return result, err } -func (s *TimerLayerChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s *TimerLayerChannelStore) GetMember(channelId string, userId string) (*model.ChannelMember, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMember(channelId, userId) @@ -1081,7 +1081,7 @@ func (s *TimerLayerChannelStore) GetMember(channelId string, userId string) (*mo return result, err } -func (s *TimerLayerChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *TimerLayerChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMemberCount(channelId, allowFromCache) @@ -1113,7 +1113,7 @@ func (s *TimerLayerChannelStore) GetMemberCountFromCache(channelId string) int64 return result } -func (s *TimerLayerChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) { +func (s *TimerLayerChannelStore) GetMemberCountsByGroup(channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMemberCountsByGroup(channelID, includeTimezones) @@ -1129,7 +1129,7 @@ func (s *TimerLayerChannelStore) GetMemberCountsByGroup(channelID string, includ return result, err } -func (s *TimerLayerChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, *model.AppError) { +func (s *TimerLayerChannelStore) GetMemberForPost(postId string, userId string) (*model.ChannelMember, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMemberForPost(postId, userId) @@ -1145,7 +1145,7 @@ func (s *TimerLayerChannelStore) GetMemberForPost(postId string, userId string) return result, err } -func (s *TimerLayerChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, *model.AppError) { +func (s *TimerLayerChannelStore) GetMembers(channelId string, offset int, limit int) (*model.ChannelMembers, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMembers(channelId, offset, limit) @@ -1177,7 +1177,7 @@ func (s *TimerLayerChannelStore) GetMembersByIds(channelId string, userIds []str return result, err } -func (s *TimerLayerChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { +func (s *TimerLayerChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMembersForUser(teamId, userId) @@ -1193,7 +1193,7 @@ func (s *TimerLayerChannelStore) GetMembersForUser(teamId string, userId string) return result, err } -func (s *TimerLayerChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, *model.AppError) { +func (s *TimerLayerChannelStore) GetMembersForUserWithPagination(teamId string, userId string, page int, perPage int) (*model.ChannelMembers, error) { start := timemodule.Now() result, err := s.ChannelStore.GetMembersForUserWithPagination(teamId, userId, page, perPage) @@ -1225,7 +1225,7 @@ func (s *TimerLayerChannelStore) GetMoreChannels(teamId string, userId string, o return result, err } -func (s *TimerLayerChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, *model.AppError) { +func (s *TimerLayerChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { start := timemodule.Now() result, err := s.ChannelStore.GetPinnedPostCount(channelId, allowFromCache) @@ -1241,7 +1241,7 @@ func (s *TimerLayerChannelStore) GetPinnedPostCount(channelId string, allowFromC return result, err } -func (s *TimerLayerChannelStore) GetPinnedPosts(channelId string) (*model.PostList, *model.AppError) { +func (s *TimerLayerChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) { start := timemodule.Now() result, err := s.ChannelStore.GetPinnedPosts(channelId) @@ -1385,7 +1385,7 @@ func (s *TimerLayerChannelStore) GroupSyncedChannelCount() (int64, *model.AppErr return result, err } -func (s *TimerLayerChannelStore) IncrementMentionCount(channelId string, userId string) *model.AppError { +func (s *TimerLayerChannelStore) IncrementMentionCount(channelId string, userId string) error { start := timemodule.Now() err := s.ChannelStore.IncrementMentionCount(channelId, userId) @@ -1586,7 +1586,7 @@ func (s *TimerLayerChannelStore) PermanentDeleteByTeam(teamId string) error { return err } -func (s *TimerLayerChannelStore) PermanentDeleteMembersByChannel(channelId string) *model.AppError { +func (s *TimerLayerChannelStore) PermanentDeleteMembersByChannel(channelId string) error { start := timemodule.Now() err := s.ChannelStore.PermanentDeleteMembersByChannel(channelId) @@ -1602,7 +1602,7 @@ func (s *TimerLayerChannelStore) PermanentDeleteMembersByChannel(channelId strin return err } -func (s *TimerLayerChannelStore) PermanentDeleteMembersByUser(userId string) *model.AppError { +func (s *TimerLayerChannelStore) PermanentDeleteMembersByUser(userId string) error { start := timemodule.Now() err := s.ChannelStore.PermanentDeleteMembersByUser(userId) @@ -1634,7 +1634,7 @@ func (s *TimerLayerChannelStore) RemoveAllDeactivatedMembers(channelId string) * return err } -func (s *TimerLayerChannelStore) RemoveMember(channelId string, userId string) *model.AppError { +func (s *TimerLayerChannelStore) RemoveMember(channelId string, userId string) error { start := timemodule.Now() err := s.ChannelStore.RemoveMember(channelId, userId) @@ -1650,7 +1650,7 @@ func (s *TimerLayerChannelStore) RemoveMember(channelId string, userId string) * return err } -func (s *TimerLayerChannelStore) RemoveMembers(channelId string, userIds []string) *model.AppError { +func (s *TimerLayerChannelStore) RemoveMembers(channelId string, userIds []string) error { start := timemodule.Now() err := s.ChannelStore.RemoveMembers(channelId, userIds) @@ -1730,7 +1730,7 @@ func (s *TimerLayerChannelStore) SaveDirectChannel(channel *model.Channel, membe return result, err } -func (s *TimerLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s *TimerLayerChannelStore) SaveMember(member *model.ChannelMember) (*model.ChannelMember, error) { start := timemodule.Now() result, err := s.ChannelStore.SaveMember(member) @@ -1746,7 +1746,7 @@ func (s *TimerLayerChannelStore) SaveMember(member *model.ChannelMember) (*model return result, err } -func (s *TimerLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s *TimerLayerChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { start := timemodule.Now() result, err := s.ChannelStore.SaveMultipleMembers(members) @@ -1890,7 +1890,7 @@ func (s *TimerLayerChannelStore) Update(channel *model.Channel) (*model.Channel, return result, err } -func (s *TimerLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, *model.AppError) { +func (s *TimerLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId string) (map[string]int64, error) { start := timemodule.Now() result, err := s.ChannelStore.UpdateLastViewedAt(channelIds, userId) @@ -1906,7 +1906,7 @@ func (s *TimerLayerChannelStore) UpdateLastViewedAt(channelIds []string, userId return result, err } -func (s *TimerLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, *model.AppError) { +func (s *TimerLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, userID string, mentionCount int) (*model.ChannelUnreadAt, error) { start := timemodule.Now() result, err := s.ChannelStore.UpdateLastViewedAtPost(unreadPost, userID, mentionCount) @@ -1922,7 +1922,7 @@ func (s *TimerLayerChannelStore) UpdateLastViewedAtPost(unreadPost *model.Post, return result, err } -func (s *TimerLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, *model.AppError) { +func (s *TimerLayerChannelStore) UpdateMember(member *model.ChannelMember) (*model.ChannelMember, error) { start := timemodule.Now() result, err := s.ChannelStore.UpdateMember(member) @@ -1954,7 +1954,7 @@ func (s *TimerLayerChannelStore) UpdateMembersRole(channelID string, userIDs []s return err } -func (s *TimerLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, *model.AppError) { +func (s *TimerLayerChannelStore) UpdateMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) { start := timemodule.Now() result, err := s.ChannelStore.UpdateMultipleMembers(members)