From 83974d8a8daa4f2cec1c04134b57dbcf6b74e02e Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Tue, 28 Jul 2020 10:27:24 +0530 Subject: [PATCH] preferencestore (#15018) * Starting migration * Migration finished * Fix i18n * Fix some tests * Fix typos * Remove overwite of http status * Add i18n string * Fix i18n * fix breakages * fix tests Co-authored-by: Rodrigo Villablanca --- app/email_batching_test.go | 12 +-- app/export.go | 4 +- app/import_functions.go | 10 ++- app/oauth.go | 6 +- app/preference.go | 24 +++--- app/team.go | 2 +- app/user.go | 2 +- i18n/en.json | 80 +++++++------------ store/errors.go | 13 ++++ store/opentracinglayer/opentracinglayer.go | 18 ++--- store/sqlstore/channel_store.go | 2 +- store/sqlstore/preference_store.go | 71 ++++++++--------- store/store.go | 18 ++--- store/storetest/channel_store.go | 80 +++++++++---------- store/storetest/mocks/PreferenceStore.go | 90 +++++++++------------- store/storetest/oauth_store.go | 8 +- store/storetest/post_store.go | 28 +++---- store/storetest/preference_store.go | 16 ++-- store/timerlayer/timerlayer.go | 18 ++--- 19 files changed, 241 insertions(+), 261 deletions(-) diff --git a/app/email_batching_test.go b/app/email_batching_test.go index a05227e4fb..ee332aaa08 100644 --- a/app/email_batching_test.go +++ b/app/email_batching_test.go @@ -95,13 +95,13 @@ func TestCheckPendingNotifications(t *testing.T) { _, err = th.App.Srv().Store.Channel().UpdateMember(channelMember) require.Nil(t, err) - err = th.App.Srv().Store.Preference().Save(&model.Preferences{{ + nErr := th.App.Srv().Store.Preference().Save(&model.Preferences{{ UserId: th.BasicUser.Id, Category: model.PREFERENCE_CATEGORY_NOTIFICATIONS, Name: model.PREFERENCE_NAME_EMAIL_INTERVAL, Value: "60", }}) - require.Nil(t, err) + require.Nil(t, nErr) // test that notifications aren't sent before interval job.checkPendingNotifications(time.Unix(10001, 0), func(string, []*batchedNotification) {}) @@ -117,13 +117,13 @@ func TestCheckPendingNotifications(t *testing.T) { require.Nil(t, err) // We reset the interval to something shorter - err = th.App.Srv().Store.Preference().Save(&model.Preferences{{ + nErr = th.App.Srv().Store.Preference().Save(&model.Preferences{{ UserId: th.BasicUser.Id, Category: model.PREFERENCE_CATEGORY_NOTIFICATIONS, Name: model.PREFERENCE_NAME_EMAIL_INTERVAL, Value: "10", }}) - require.Nil(t, err) + require.Nil(t, nErr) var wasCalled int32 job.checkPendingNotifications(time.Unix(10050, 0), func(string, []*batchedNotification) { @@ -253,13 +253,13 @@ func TestCheckPendingNotificationsCantParseInterval(t *testing.T) { require.Nil(t, err) // preference value is not an integer, so we'll fall back to the default 15min value - err = th.App.Srv().Store.Preference().Save(&model.Preferences{{ + nErr := th.App.Srv().Store.Preference().Save(&model.Preferences{{ UserId: th.BasicUser.Id, Category: model.PREFERENCE_CATEGORY_NOTIFICATIONS, Name: model.PREFERENCE_NAME_EMAIL_INTERVAL, Value: "notAnIntegerValue", }}) - require.Nil(t, err) + require.Nil(t, nErr) job.pendingNotifications[th.BasicUser.Id] = []*batchedNotification{ { diff --git a/app/export.go b/app/export.go index 348bc77df2..e3b3b1f877 100644 --- a/app/export.go +++ b/app/export.go @@ -281,8 +281,8 @@ func (a *App) buildUserTeamAndChannelMemberships(userId string) (*[]UserTeamImpo } // Get the user theme - themePreference, err := a.Srv().Store.Preference().Get(member.UserId, model.PREFERENCE_CATEGORY_THEME, member.TeamId) - if err == nil { + themePreference, nErr := a.Srv().Store.Preference().Get(member.UserId, model.PREFERENCE_CATEGORY_THEME, member.TeamId) + if nErr == nil { memberData.Theme = &themePreference.Value } diff --git a/app/import_functions.go b/app/import_functions.go index 411b97e483..816ecf98a8 100644 --- a/app/import_functions.go +++ b/app/import_functions.go @@ -1428,8 +1428,14 @@ func (a *App) importDirectChannel(data *DirectChannelImportData, dryRun bool) *m } if err := a.Srv().Store.Preference().Save(&preferences); err != nil { - err.StatusCode = http.StatusBadRequest - return err + var appErr *model.AppError + switch { + case errors.As(err, &appErr): + appErr.StatusCode = http.StatusBadRequest + return appErr + default: + return model.NewAppError("importDirectChannel", "app.preference.save.updating.app_error", nil, err.Error(), http.StatusBadRequest) + } } if data.Header != nil { diff --git a/app/oauth.go b/app/oauth.go index d8ae42242b..25d6196cc5 100644 --- a/app/oauth.go +++ b/app/oauth.go @@ -215,8 +215,8 @@ func (a *App) AllowOAuthAppAccessToUser(userId string, authRequest *model.Author Value: authRequest.Scope, } - if err = a.Srv().Store.Preference().Save(&model.Preferences{authorizedApp}); err != nil { - mlog.Error("error saving store prefrence", mlog.Err(err)) + if nErr := a.Srv().Store.Preference().Save(&model.Preferences{authorizedApp}); nErr != nil { + mlog.Error("error saving store preference", mlog.Err(nErr)) return authRequest.RedirectUri + "?error=server_error&state=" + authRequest.State, nil } @@ -487,7 +487,7 @@ func (a *App) DeauthorizeOAuthAppForUser(userId, appId string) *model.AppError { // Deauthorize the app if err := a.Srv().Store.Preference().Delete(userId, model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP, appId); err != nil { - return err + return model.NewAppError("DeauthorizeOAuthAppForUser", "app.preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError) } return nil diff --git a/app/preference.go b/app/preference.go index 7cc048870b..f3e0c93df7 100644 --- a/app/preference.go +++ b/app/preference.go @@ -4,6 +4,7 @@ package app import ( + "errors" "net/http" "github.com/mattermost/mattermost-server/v5/model" @@ -12,8 +13,7 @@ import ( func (a *App) GetPreferencesForUser(userId string) (model.Preferences, *model.AppError) { preferences, err := a.Srv().Store.Preference().GetAll(userId) if err != nil { - err.StatusCode = http.StatusBadRequest - return nil, err + return nil, model.NewAppError("GetPreferencesForUser", "app.preference.get_all.app_error", nil, err.Error(), http.StatusBadRequest) } return preferences, nil } @@ -21,11 +21,10 @@ func (a *App) GetPreferencesForUser(userId string) (model.Preferences, *model.Ap func (a *App) GetPreferenceByCategoryForUser(userId string, category string) (model.Preferences, *model.AppError) { preferences, err := a.Srv().Store.Preference().GetCategory(userId, category) if err != nil { - err.StatusCode = http.StatusBadRequest - return nil, err + return nil, model.NewAppError("GetPreferenceByCategoryForUser", "app.preference.get_category.app_error", nil, err.Error(), http.StatusBadRequest) } if len(preferences) == 0 { - err := model.NewAppError("getPreferenceCategory", "api.preference.preferences_category.get.app_error", nil, "", http.StatusNotFound) + err := model.NewAppError("GetPreferenceByCategoryForUser", "api.preference.preferences_category.get.app_error", nil, "", http.StatusNotFound) return nil, err } return preferences, nil @@ -34,8 +33,7 @@ func (a *App) GetPreferenceByCategoryForUser(userId string, category string) (mo func (a *App) GetPreferenceByCategoryAndNameForUser(userId string, category string, preferenceName string) (*model.Preference, *model.AppError) { res, err := a.Srv().Store.Preference().Get(userId, category, preferenceName) if err != nil { - err.StatusCode = http.StatusBadRequest - return nil, err + return nil, model.NewAppError("GetPreferenceByCategoryAndNameForUser", "app.preference.get.app_error", nil, err.Error(), http.StatusBadRequest) } return res, nil } @@ -49,8 +47,13 @@ func (a *App) UpdatePreferences(userId string, preferences model.Preferences) *m } if err := a.Srv().Store.Preference().Save(&preferences); err != nil { - err.StatusCode = http.StatusBadRequest - return err + var appErr *model.AppError + switch { + case errors.As(err, &appErr): + return appErr + default: + return model.NewAppError("UpdatePreferences", "app.preference.save.updating.app_error", nil, err.Error(), http.StatusBadRequest) + } } if err := a.Srv().Store.Channel().UpdateSidebarChannelsByPreferences(&preferences); err != nil { @@ -79,8 +82,7 @@ func (a *App) DeletePreferences(userId string, preferences model.Preferences) *m for _, preference := range preferences { if err := a.Srv().Store.Preference().Delete(userId, preference.Category, preference.Name); err != nil { - err.StatusCode = http.StatusBadRequest - return err + return model.NewAppError("DeletePreferences", "app.preference.delete.app_error", nil, err.Error(), http.StatusBadRequest) } } diff --git a/app/team.go b/app/team.go index 448bce4cbb..0645213713 100644 --- a/app/team.go +++ b/app/team.go @@ -984,7 +984,7 @@ func (a *App) RemoveTeamMemberFromTeam(teamMember *model.TeamMember, requestorId // delete the preferences that set the last channel used in the team and other team specific preferences if err := a.Srv().Store.Preference().DeleteCategory(user.Id, teamMember.TeamId); err != nil { - return err + return model.NewAppError("RemoveTeamMemberFromTeam", "app.preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError) } a.ClearSessionCacheForUser(user.Id) diff --git a/app/user.go b/app/user.go index 4cdccfd180..a903021723 100644 --- a/app/user.go +++ b/app/user.go @@ -1477,7 +1477,7 @@ func (a *App) PermanentDeleteUser(user *model.User) *model.AppError { } if err := a.Srv().Store.Preference().PermanentDeleteByUser(user.Id); err != nil { - return err + return model.NewAppError("PermanentDeleteUser", "app.preference.permanent_delete_by_user.app_error", nil, err.Error(), http.StatusInternalServerError) } if err := a.Srv().Store.Channel().PermanentDeleteMembersByUser(user.Id); err != nil { diff --git a/i18n/en.json b/i18n/en.json index 54208ff621..2c82d22fe0 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -4246,6 +4246,30 @@ "id": "app.plugin.write_file.saving.app_error", "translation": "An error occurred while saving the file." }, + { + "id": "app.preference.delete.app_error", + "translation": "We encountered an error while deleting preferences." + }, + { + "id": "app.preference.get.app_error", + "translation": "We encountered an error while finding preferences." + }, + { + "id": "app.preference.get_all.app_error", + "translation": "We encountered an error while finding preferences." + }, + { + "id": "app.preference.get_category.app_error", + "translation": "We encountered an error while finding preferences." + }, + { + "id": "app.preference.permanent_delete_by_user.app_error", + "translation": "We encountered an error while deleteing preferences." + }, + { + "id": "app.preference.save.updating.app_error", + "translation": "We encountered an error while updating preferences." + }, { "id": "app.reaction.bulk_get_for_post_ids.app_error", "translation": "Unable to get reactions for post." @@ -4738,6 +4762,10 @@ "id": "ent.data_retention.channel_member_history_batch.internal_error", "translation": "Failed to purge records." }, + { + "id": "ent.data_retention.flags_batch.internal_error", + "translation": "We encountered an error cleaning up the batch of flags." + }, { "id": "ent.data_retention.generic.license.error", "translation": "Your license does not support Data Retention." @@ -7138,58 +7166,6 @@ "id": "store.sql_post.update.app_error", "translation": "Unable to update the Post." }, - { - "id": "store.sql_preference.cleanup_flags_batch.app_error", - "translation": "We encountered an error cleaning up the batch of flags." - }, - { - "id": "store.sql_preference.delete.app_error", - "translation": "We encountered an error while deleting preferences." - }, - { - "id": "store.sql_preference.get.app_error", - "translation": "We encountered an error while finding preferences." - }, - { - "id": "store.sql_preference.get_all.app_error", - "translation": "We encountered an error while finding preferences." - }, - { - "id": "store.sql_preference.get_category.app_error", - "translation": "We encountered an error while finding preferences." - }, - { - "id": "store.sql_preference.insert.exists.app_error", - "translation": "A preference with that user id, category, and name already exists." - }, - { - "id": "store.sql_preference.insert.save.app_error", - "translation": "Unable to save the preference." - }, - { - "id": "store.sql_preference.permanent_delete_by_user.app_error", - "translation": "We encountered an error while deleteing preferences." - }, - { - "id": "store.sql_preference.save.commit_transaction.app_error", - "translation": "Unable to commit transaction to save preferences." - }, - { - "id": "store.sql_preference.save.missing_driver.app_error", - "translation": "We encountered an error while updating preferences." - }, - { - "id": "store.sql_preference.save.open_transaction.app_error", - "translation": "Unable to open transaction to save preferences." - }, - { - "id": "store.sql_preference.save.updating.app_error", - "translation": "We encountered an error while updating preferences." - }, - { - "id": "store.sql_preference.update.app_error", - "translation": "Unable to update the preference." - }, { "id": "store.sql_role.delete.update.app_error", "translation": "Unable to delete the role." diff --git a/store/errors.go b/store/errors.go index ad2e27847b..c5e36194ff 100644 --- a/store/errors.go +++ b/store/errors.go @@ -102,3 +102,16 @@ func (e *ErrOutOfBounds) Error() string { func NewErrOutOfBounds(value int) *ErrOutOfBounds { return &ErrOutOfBounds{value: value} } + +// ErrNotImplemented indicates that some feature or requirement is not implemented yet. +type ErrNotImplemented struct { + detail string +} + +func (e *ErrNotImplemented) Error() string { + return e.detail +} + +func NewErrNotImplemented(detail string) *ErrNotImplemented { + return &ErrNotImplemented{detail: detail} +} diff --git a/store/opentracinglayer/opentracinglayer.go b/store/opentracinglayer/opentracinglayer.go index cb5c49a69f..c37c6d2c9c 100644 --- a/store/opentracinglayer/opentracinglayer.go +++ b/store/opentracinglayer/opentracinglayer.go @@ -5347,7 +5347,7 @@ func (s *OpenTracingLayerPostStore) Update(newPost *model.Post, oldPost *model.P return resultVar0, resultVar1 } -func (s *OpenTracingLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, *model.AppError) { +func (s *OpenTracingLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.CleanupFlagsBatch") s.Root.Store.SetContext(newCtx) @@ -5365,7 +5365,7 @@ func (s *OpenTracingLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, return resultVar0, resultVar1 } -func (s *OpenTracingLayerPreferenceStore) Delete(userId string, category string, name string) *model.AppError { +func (s *OpenTracingLayerPreferenceStore) Delete(userId string, category string, name string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.Delete") s.Root.Store.SetContext(newCtx) @@ -5383,7 +5383,7 @@ func (s *OpenTracingLayerPreferenceStore) Delete(userId string, category string, return resultVar0 } -func (s *OpenTracingLayerPreferenceStore) DeleteCategory(userId string, category string) *model.AppError { +func (s *OpenTracingLayerPreferenceStore) DeleteCategory(userId string, category string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.DeleteCategory") s.Root.Store.SetContext(newCtx) @@ -5401,7 +5401,7 @@ func (s *OpenTracingLayerPreferenceStore) DeleteCategory(userId string, category return resultVar0 } -func (s *OpenTracingLayerPreferenceStore) DeleteCategoryAndName(category string, name string) *model.AppError { +func (s *OpenTracingLayerPreferenceStore) DeleteCategoryAndName(category string, name string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.DeleteCategoryAndName") s.Root.Store.SetContext(newCtx) @@ -5419,7 +5419,7 @@ func (s *OpenTracingLayerPreferenceStore) DeleteCategoryAndName(category string, return resultVar0 } -func (s *OpenTracingLayerPreferenceStore) Get(userId string, category string, name string) (*model.Preference, *model.AppError) { +func (s *OpenTracingLayerPreferenceStore) Get(userId string, category string, name string) (*model.Preference, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.Get") s.Root.Store.SetContext(newCtx) @@ -5437,7 +5437,7 @@ func (s *OpenTracingLayerPreferenceStore) Get(userId string, category string, na return resultVar0, resultVar1 } -func (s *OpenTracingLayerPreferenceStore) GetAll(userId string) (model.Preferences, *model.AppError) { +func (s *OpenTracingLayerPreferenceStore) GetAll(userId string) (model.Preferences, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.GetAll") s.Root.Store.SetContext(newCtx) @@ -5455,7 +5455,7 @@ func (s *OpenTracingLayerPreferenceStore) GetAll(userId string) (model.Preferenc return resultVar0, resultVar1 } -func (s *OpenTracingLayerPreferenceStore) GetCategory(userId string, category string) (model.Preferences, *model.AppError) { +func (s *OpenTracingLayerPreferenceStore) GetCategory(userId string, category string) (model.Preferences, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.GetCategory") s.Root.Store.SetContext(newCtx) @@ -5473,7 +5473,7 @@ func (s *OpenTracingLayerPreferenceStore) GetCategory(userId string, category st return resultVar0, resultVar1 } -func (s *OpenTracingLayerPreferenceStore) PermanentDeleteByUser(userId string) *model.AppError { +func (s *OpenTracingLayerPreferenceStore) PermanentDeleteByUser(userId string) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.PermanentDeleteByUser") s.Root.Store.SetContext(newCtx) @@ -5491,7 +5491,7 @@ func (s *OpenTracingLayerPreferenceStore) PermanentDeleteByUser(userId string) * return resultVar0 } -func (s *OpenTracingLayerPreferenceStore) Save(preferences *model.Preferences) *model.AppError { +func (s *OpenTracingLayerPreferenceStore) Save(preferences *model.Preferences) error { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PreferenceStore.Save") s.Root.Store.SetContext(newCtx) diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index 453dbb89df..a46e3677d8 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -3958,7 +3958,7 @@ func (s SqlChannelStore) UpdateSidebarCategories(userId, teamId string, categori for _, channelID := range category.Channels { // This breaks the PreferenceStore abstraction, but it should be safe to assume that everything is a SQL // store in this package. - if err := s.Preference().(*SqlPreferenceStore).save(transaction, &model.Preference{ + if err = s.Preference().(*SqlPreferenceStore).save(transaction, &model.Preference{ Name: channelID, UserId: userId, Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, diff --git a/store/sqlstore/preference_store.go b/store/sqlstore/preference_store.go index d3b5730ae9..6c49050b2b 100644 --- a/store/sqlstore/preference_store.go +++ b/store/sqlstore/preference_store.go @@ -4,10 +4,11 @@ package sqlstore import ( - "net/http" + "fmt" + + "github.com/pkg/errors" "github.com/mattermost/gorp" - "github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/store" @@ -51,14 +52,17 @@ func (s SqlPreferenceStore) deleteUnusedFeatures() { "Category": model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS, "Value": "false", } - s.GetMaster().Exec(sql, queryParams) + _, err := s.GetMaster().Exec(sql, queryParams) + if err != nil { + mlog.Warn("Failed to delete unused features", mlog.Err(err)) + } } -func (s SqlPreferenceStore) Save(preferences *model.Preferences) *model.AppError { +func (s SqlPreferenceStore) Save(preferences *model.Preferences) error { // wrap in a transaction so that if one fails, everything fails transaction, err := s.GetMaster().Begin() if err != nil { - return model.NewAppError("SqlPreferenceStore.Save", "store.sql_preference.save.open_transaction.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "begin_transaction") } defer finalizeTransaction(transaction) @@ -71,12 +75,12 @@ func (s SqlPreferenceStore) Save(preferences *model.Preferences) *model.AppError if err := transaction.Commit(); err != nil { // don't need to rollback here since the transaction is already closed - return model.NewAppError("SqlPreferenceStore.Save", "store.sql_preference.save.commit_transaction.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "commit_transaction") } return nil } -func (s SqlPreferenceStore) save(transaction *gorp.Transaction, preference *model.Preference) *model.AppError { +func (s SqlPreferenceStore) save(transaction *gorp.Transaction, preference *model.Preference) error { preference.PreUpdate() if err := preference.IsValid(); err != nil { @@ -99,7 +103,7 @@ func (s SqlPreferenceStore) save(transaction *gorp.Transaction, preference *mode (:UserId, :Category, :Name, :Value) ON DUPLICATE KEY UPDATE Value = :Value`, params); err != nil { - return model.NewAppError("SqlPreferenceStore.save", "store.sql_preference.save.updating.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "failed to save Preference") } return nil } else if s.DriverName() == model.DATABASE_DRIVER_POSTGRES { @@ -114,7 +118,7 @@ func (s SqlPreferenceStore) save(transaction *gorp.Transaction, preference *mode AND Category = :Category AND Name = :Name`, params) if err != nil { - return model.NewAppError("SqlPreferenceStore.save", "store.sql_preference.save.updating.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrap(err, "failed to count Preferences") } if count == 1 { @@ -122,32 +126,29 @@ func (s SqlPreferenceStore) save(transaction *gorp.Transaction, preference *mode } return s.insert(transaction, preference) } - return model.NewAppError("SqlPreferenceStore.save", "store.sql_preference.save.missing_driver.app_error", nil, "Failed to update preference because of missing driver", http.StatusNotImplemented) + return store.NewErrNotImplemented("failed to update preference because of missing driver") } -func (s SqlPreferenceStore) insert(transaction *gorp.Transaction, preference *model.Preference) *model.AppError { +func (s SqlPreferenceStore) insert(transaction *gorp.Transaction, preference *model.Preference) error { if err := transaction.Insert(preference); err != nil { if IsUniqueConstraintError(err, []string{"UserId", "preferences_pkey"}) { - return model.NewAppError("SqlPreferenceStore.insert", "store.sql_preference.insert.exists.app_error", nil, - "user_id="+preference.UserId+", category="+preference.Category+", name="+preference.Name+", "+err.Error(), http.StatusBadRequest) + return store.NewErrInvalidInput("Preference", "", fmt.Sprintf("<%s, %s, %s>", preference.UserId, preference.Category, preference.Name)) } - return model.NewAppError("SqlPreferenceStore.insert", "store.sql_preference.insert.save.app_error", nil, - "user_id="+preference.UserId+", category="+preference.Category+", name="+preference.Name+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to save Preference with userId=%s, category=%s, name=%s", preference.UserId, preference.Category, preference.Name) } return nil } -func (s SqlPreferenceStore) update(transaction *gorp.Transaction, preference *model.Preference) *model.AppError { +func (s SqlPreferenceStore) update(transaction *gorp.Transaction, preference *model.Preference) error { if _, err := transaction.Update(preference); err != nil { - return model.NewAppError("SqlPreferenceStore.update", "store.sql_preference.update.app_error", nil, - "user_id="+preference.UserId+", category="+preference.Category+", name="+preference.Name+", "+err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to update Preference with userId=%s, category=%s, name=%s", preference.UserId, preference.Category, preference.Name) } return nil } -func (s SqlPreferenceStore) Get(userId string, category string, name string) (*model.Preference, *model.AppError) { +func (s SqlPreferenceStore) Get(userId string, category string, name string) (*model.Preference, error) { var preference *model.Preference if err := s.GetReplica().SelectOne(&preference, @@ -159,12 +160,12 @@ func (s SqlPreferenceStore) Get(userId string, category string, name string) (*m UserId = :UserId AND Category = :Category AND Name = :Name`, map[string]interface{}{"UserId": userId, "Category": category, "Name": name}); err != nil { - return nil, model.NewAppError("SqlPreferenceStore.Get", "store.sql_preference.get.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find Preference with userId=%s, category=%s, name=%s", userId, category, name) } return preference, nil } -func (s SqlPreferenceStore) GetCategory(userId string, category string) (model.Preferences, *model.AppError) { +func (s SqlPreferenceStore) GetCategory(userId string, category string) (model.Preferences, error) { var preferences model.Preferences if _, err := s.GetReplica().Select(&preferences, @@ -175,14 +176,14 @@ func (s SqlPreferenceStore) GetCategory(userId string, category string) (model.P WHERE UserId = :UserId AND Category = :Category`, map[string]interface{}{"UserId": userId, "Category": category}); err != nil { - return nil, model.NewAppError("SqlPreferenceStore.GetCategory", "store.sql_preference.get_category.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find Preferences with userId=%s and category=%s", userId, category) } return preferences, nil } -func (s SqlPreferenceStore) GetAll(userId string) (model.Preferences, *model.AppError) { +func (s SqlPreferenceStore) GetAll(userId string) (model.Preferences, error) { var preferences model.Preferences if _, err := s.GetReplica().Select(&preferences, @@ -192,12 +193,12 @@ func (s SqlPreferenceStore) GetAll(userId string) (model.Preferences, *model.App Preferences WHERE UserId = :UserId`, map[string]interface{}{"UserId": userId}); err != nil { - return nil, model.NewAppError("SqlPreferenceStore.GetAll", "store.sql_preference.get_all.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, errors.Wrapf(err, "failed to find Preferences with userId=%s", userId) } return preferences, nil } -func (s SqlPreferenceStore) PermanentDeleteByUser(userId string) *model.AppError { +func (s SqlPreferenceStore) PermanentDeleteByUser(userId string) error { query := `DELETE FROM Preferences @@ -205,13 +206,13 @@ func (s SqlPreferenceStore) PermanentDeleteByUser(userId string) *model.AppError UserId = :UserId` if _, err := s.GetMaster().Exec(query, map[string]interface{}{"UserId": userId}); err != nil { - return model.NewAppError("SqlPreferenceStore.Delete", "store.sql_preference.permanent_delete_by_user.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to delete Preference with userId=%s", userId) } return nil } -func (s SqlPreferenceStore) Delete(userId, category, name string) *model.AppError { +func (s SqlPreferenceStore) Delete(userId, category, name string) error { query := `DELETE FROM Preferences WHERE @@ -222,13 +223,13 @@ func (s SqlPreferenceStore) Delete(userId, category, name string) *model.AppErro _, err := s.GetMaster().Exec(query, map[string]interface{}{"UserId": userId, "Category": category, "Name": name}) if err != nil { - return model.NewAppError("SqlPreferenceStore.Delete", "store.sql_preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to delete Preference with userId=%s, category=%s and name=%s", userId, category, name) } return nil } -func (s SqlPreferenceStore) DeleteCategory(userId string, category string) *model.AppError { +func (s SqlPreferenceStore) DeleteCategory(userId string, category string) error { _, err := s.GetMaster().Exec( `DELETE FROM Preferences @@ -237,13 +238,13 @@ func (s SqlPreferenceStore) DeleteCategory(userId string, category string) *mode AND Category = :Category`, map[string]interface{}{"UserId": userId, "Category": category}) if err != nil { - return model.NewAppError("SqlPreferenceStore.DeleteCategory", "store.sql_preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to delete Preference with userId=%s and category=%s", userId, category) } return nil } -func (s SqlPreferenceStore) DeleteCategoryAndName(category string, name string) *model.AppError { +func (s SqlPreferenceStore) DeleteCategoryAndName(category string, name string) error { _, err := s.GetMaster().Exec( `DELETE FROM Preferences @@ -252,13 +253,13 @@ func (s SqlPreferenceStore) DeleteCategoryAndName(category string, name string) AND Category = :Category`, map[string]interface{}{"Name": name, "Category": category}) if err != nil { - return model.NewAppError("SqlPreferenceStore.DeleteCategoryAndName", "store.sql_preference.delete.app_error", nil, err.Error(), http.StatusInternalServerError) + return errors.Wrapf(err, "failed to delete Preference with category=%s and name=%s", category, name) } return nil } -func (s SqlPreferenceStore) CleanupFlagsBatch(limit int64) (int64, *model.AppError) { +func (s SqlPreferenceStore) CleanupFlagsBatch(limit int64) (int64, error) { query := `DELETE FROM Preferences @@ -287,12 +288,12 @@ func (s SqlPreferenceStore) CleanupFlagsBatch(limit int64) (int64, *model.AppErr sqlResult, err := s.GetMaster().Exec(query, map[string]interface{}{"Category": model.PREFERENCE_CATEGORY_FLAGGED_POST, "Limit": limit}) if err != nil { - return int64(0), model.NewAppError("SqlPostStore.CleanupFlagsBatch", "store.sql_preference.cleanup_flags_batch.app_error", nil, ""+err.Error(), http.StatusInternalServerError) + return int64(0), errors.Wrap(err, "failed to delete Preference") } rowsAffected, err := sqlResult.RowsAffected() if err != nil { - return int64(0), model.NewAppError("SqlPostStore.CleanupFlagsBatch", "store.sql_preference.cleanup_flags_batch.app_error", nil, ""+err.Error(), http.StatusInternalServerError) + return int64(0), errors.Wrap(err, "unable to get rows affected") } return rowsAffected, nil diff --git a/store/store.go b/store/store.go index 95b8dac024..3c0ab807a7 100644 --- a/store/store.go +++ b/store/store.go @@ -494,15 +494,15 @@ type CommandWebhookStore interface { } type PreferenceStore interface { - Save(preferences *model.Preferences) *model.AppError - GetCategory(userId string, category string) (model.Preferences, *model.AppError) - Get(userId string, category string, name string) (*model.Preference, *model.AppError) - GetAll(userId string) (model.Preferences, *model.AppError) - Delete(userId, category, name string) *model.AppError - DeleteCategory(userId string, category string) *model.AppError - DeleteCategoryAndName(category string, name string) *model.AppError - PermanentDeleteByUser(userId string) *model.AppError - CleanupFlagsBatch(limit int64) (int64, *model.AppError) + Save(preferences *model.Preferences) error + GetCategory(userId string, category string) (model.Preferences, error) + Get(userId string, category string, name string) (*model.Preference, error) + GetAll(userId string) (model.Preferences, error) + Delete(userId, category, name string) error + DeleteCategory(userId string, category string) error + DeleteCategoryAndName(category string, name string) error + PermanentDeleteByUser(userId string) error + CleanupFlagsBatch(limit int64) (int64, error) } type LicenseStore interface { diff --git a/store/storetest/channel_store.go b/store/storetest/channel_store.go index 3773dc5943..3d67b3d858 100644 --- a/store/storetest/channel_store.go +++ b/store/storetest/channel_store.go @@ -7286,8 +7286,8 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Nil(t, err) + res, nErr := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) @@ -7303,9 +7303,9 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.NotNil(t, err) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.NotNil(t, nErr) + assert.True(t, errors.Is(nErr, sql.ErrNoRows)) assert.Nil(t, res) }) @@ -7351,8 +7351,8 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) - assert.Nil(t, err) + res, nErr := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) @@ -7368,9 +7368,9 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) - assert.NotNil(t, err) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) + assert.NotNil(t, nErr) + assert.True(t, errors.Is(nErr, sql.ErrNoRows)) assert.Nil(t, res) }) @@ -7426,8 +7426,8 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) - assert.Nil(t, err) + res, nErr := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) @@ -7441,8 +7441,8 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { assert.Nil(t, err) assert.Equal(t, []string{dmChannel.Id}, updated[0].Channels) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) - assert.Nil(t, err) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) + assert.NoError(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) @@ -7455,8 +7455,8 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) + require.Error(t, nErr) assert.Nil(t, res) // Remove it from favorites on the second team. The favorites preference was already deleted. @@ -7468,8 +7468,8 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, dmChannel.Id) + require.Error(t, nErr) assert.Nil(t, res) }) @@ -7536,13 +7536,13 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Nil(t, err) + res, nErr := ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) - res, err = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.True(t, errors.Is(nErr, sql.ErrNoRows)) assert.Nil(t, res) // And user2 favorite it @@ -7558,13 +7558,13 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Nil(t, err) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) - res, err = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Nil(t, err) + res, nErr = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) @@ -7581,12 +7581,12 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.True(t, errors.Is(nErr, sql.ErrNoRows)) assert.Nil(t, res) - res, err = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Nil(t, err) + res, nErr = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.Nil(t, nErr) assert.NotNil(t, res) assert.Equal(t, "true", res.Value) @@ -7603,12 +7603,12 @@ func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlSupplier) { }) assert.Nil(t, err) - res, err = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.True(t, errors.Is(nErr, sql.ErrNoRows)) assert.Nil(t, res) - res, err = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) - assert.Equal(t, sql.ErrNoRows.Error(), err.DetailedError) + res, nErr = ss.Preference().Get(userId2, model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, channel.Id) + assert.True(t, errors.Is(nErr, sql.ErrNoRows)) assert.Nil(t, res) }) @@ -7939,7 +7939,7 @@ func testCreateInitialSidebarCategories(t *testing.T, ss store.Store) { }) require.Nil(t, err) - err = ss.Preference().Save(&model.Preferences{ + nErr = ss.Preference().Save(&model.Preferences{ { UserId: userId, Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, @@ -7947,7 +7947,7 @@ func testCreateInitialSidebarCategories(t *testing.T, ss store.Store) { Value: "true", }, }) - require.Nil(t, err) + require.Nil(t, nErr) // Create the categories nErr = ss.Channel().CreateInitialSidebarCategories(userId, teamId) @@ -7996,7 +7996,7 @@ func testCreateInitialSidebarCategories(t *testing.T, ss store.Store) { }) require.Nil(t, err) - err = ss.Preference().Save(&model.Preferences{ + nErr = ss.Preference().Save(&model.Preferences{ { UserId: userId, Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, @@ -8010,7 +8010,7 @@ func testCreateInitialSidebarCategories(t *testing.T, ss store.Store) { Value: "true", }, }) - require.Nil(t, err) + require.Nil(t, nErr) // Create the categories nErr = ss.Channel().CreateInitialSidebarCategories(userId, teamId) @@ -8107,7 +8107,7 @@ func testCreateInitialSidebarCategories(t *testing.T, ss store.Store) { }) require.Nil(t, err) - err = ss.Preference().Save(&model.Preferences{ + nErr = ss.Preference().Save(&model.Preferences{ { UserId: userId, Category: model.PREFERENCE_CATEGORY_FAVORITE_CHANNEL, @@ -8115,7 +8115,7 @@ func testCreateInitialSidebarCategories(t *testing.T, ss store.Store) { Value: "true", }, }) - require.Nil(t, err) + require.Nil(t, nErr) // Create the categories nErr = ss.Channel().CreateInitialSidebarCategories(userId, teamId) diff --git a/store/storetest/mocks/PreferenceStore.go b/store/storetest/mocks/PreferenceStore.go index 0e5a72b56a..0cf5132c96 100644 --- a/store/storetest/mocks/PreferenceStore.go +++ b/store/storetest/mocks/PreferenceStore.go @@ -15,7 +15,7 @@ type PreferenceStore struct { } // CleanupFlagsBatch provides a mock function with given fields: limit -func (_m *PreferenceStore) CleanupFlagsBatch(limit int64) (int64, *model.AppError) { +func (_m *PreferenceStore) CleanupFlagsBatch(limit int64) (int64, error) { ret := _m.Called(limit) var r0 int64 @@ -25,68 +25,60 @@ func (_m *PreferenceStore) CleanupFlagsBatch(limit int64) (int64, *model.AppErro r0 = ret.Get(0).(int64) } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(int64) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(int64) error); ok { r1 = rf(limit) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // Delete provides a mock function with given fields: userId, category, name -func (_m *PreferenceStore) Delete(userId string, category string, name string) *model.AppError { +func (_m *PreferenceStore) Delete(userId string, category string, name string) error { ret := _m.Called(userId, category, name) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(string, string, string) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(string, string, string) error); ok { r0 = rf(userId, category, name) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 } // DeleteCategory provides a mock function with given fields: userId, category -func (_m *PreferenceStore) DeleteCategory(userId string, category string) *model.AppError { +func (_m *PreferenceStore) DeleteCategory(userId string, category string) error { ret := _m.Called(userId, category) - 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(userId, category) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 } // DeleteCategoryAndName provides a mock function with given fields: category, name -func (_m *PreferenceStore) DeleteCategoryAndName(category string, name string) *model.AppError { +func (_m *PreferenceStore) DeleteCategoryAndName(category string, name string) error { ret := _m.Called(category, name) - 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(category, name) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 } // Get provides a mock function with given fields: userId, category, name -func (_m *PreferenceStore) Get(userId string, category string, name string) (*model.Preference, *model.AppError) { +func (_m *PreferenceStore) Get(userId string, category string, name string) (*model.Preference, error) { ret := _m.Called(userId, category, name) var r0 *model.Preference @@ -98,20 +90,18 @@ func (_m *PreferenceStore) Get(userId string, category string, name string) (*mo } } - var r1 *model.AppError - if rf, ok := ret.Get(1).(func(string, string, string) *model.AppError); ok { + var r1 error + if rf, ok := ret.Get(1).(func(string, string, string) error); ok { r1 = rf(userId, category, name) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetAll provides a mock function with given fields: userId -func (_m *PreferenceStore) GetAll(userId string) (model.Preferences, *model.AppError) { +func (_m *PreferenceStore) GetAll(userId string) (model.Preferences, error) { ret := _m.Called(userId) var r0 model.Preferences @@ -123,20 +113,18 @@ func (_m *PreferenceStore) GetAll(userId string) (model.Preferences, *model.AppE } } - 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(userId) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // GetCategory provides a mock function with given fields: userId, category -func (_m *PreferenceStore) GetCategory(userId string, category string) (model.Preferences, *model.AppError) { +func (_m *PreferenceStore) GetCategory(userId string, category string) (model.Preferences, error) { ret := _m.Called(userId, category) var r0 model.Preferences @@ -148,45 +136,39 @@ func (_m *PreferenceStore) GetCategory(userId string, category string) (model.Pr } } - 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(userId, category) } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*model.AppError) - } + r1 = ret.Error(1) } return r0, r1 } // PermanentDeleteByUser provides a mock function with given fields: userId -func (_m *PreferenceStore) PermanentDeleteByUser(userId string) *model.AppError { +func (_m *PreferenceStore) PermanentDeleteByUser(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 } // Save provides a mock function with given fields: preferences -func (_m *PreferenceStore) Save(preferences *model.Preferences) *model.AppError { +func (_m *PreferenceStore) Save(preferences *model.Preferences) error { ret := _m.Called(preferences) - var r0 *model.AppError - if rf, ok := ret.Get(0).(func(*model.Preferences) *model.AppError); ok { + var r0 error + if rf, ok := ret.Get(0).(func(*model.Preferences) error); ok { r0 = rf(preferences) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*model.AppError) - } + r0 = ret.Error(0) } return r0 diff --git a/store/storetest/oauth_store.go b/store/storetest/oauth_store.go index 0dc9c239f4..9dfd90ba8e 100644 --- a/store/storetest/oauth_store.go +++ b/store/storetest/oauth_store.go @@ -303,8 +303,8 @@ func testOAuthGetAuthorizedApps(t *testing.T, ss store.Store) { p.Category = model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP p.Name = a1.Id p.Value = "true" - err = ss.Preference().Save(&model.Preferences{p}) - require.Nil(t, err) + nErr := ss.Preference().Save(&model.Preferences{p}) + require.Nil(t, nErr) apps, err = ss.OAuth().GetAuthorizedApps(a1.CreatorId, 0, 1000) require.Nil(t, err) @@ -326,8 +326,8 @@ func testOAuthGetAccessDataByUserForApp(t *testing.T, ss store.Store) { p.Category = model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP p.Name = a1.Id p.Value = "true" - err = ss.Preference().Save(&model.Preferences{p}) - require.Nil(t, err) + nErr := ss.Preference().Save(&model.Preferences{p}) + require.Nil(t, nErr) apps, err := ss.OAuth().GetAuthorizedApps(a1.CreatorId, 0, 1000) require.Nil(t, err) diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index e89aed3af0..9af8c3046f 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -1902,8 +1902,8 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { }, } - err = ss.Preference().Save(&preferences) - require.Nil(t, err) + nErr := ss.Preference().Save(&preferences) + require.Nil(t, nErr) r2, err := ss.Post().GetFlaggedPosts(o1.UserId, 0, 2) require.Nil(t, err) @@ -1918,8 +1918,8 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { }, } - err = ss.Preference().Save(&preferences) - require.Nil(t, err) + nErr = ss.Preference().Save(&preferences) + require.Nil(t, nErr) r3, err := ss.Post().GetFlaggedPosts(o1.UserId, 0, 1) require.Nil(t, err) @@ -1946,8 +1946,8 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { }, } - err = ss.Preference().Save(&preferences) - require.Nil(t, err) + nErr = ss.Preference().Save(&preferences) + require.Nil(t, nErr) r4, err = ss.Post().GetFlaggedPosts(o1.UserId, 0, 2) require.Nil(t, err) @@ -2000,20 +2000,20 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) { Value: "true", } - err = ss.Preference().Save(&model.Preferences{preference}) - require.Nil(t, err) + nErr := ss.Preference().Save(&model.Preferences{preference}) + require.Nil(t, nErr) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10) require.Nil(t, err) require.Len(t, r.Order, 1, "should have 1 post") preference.Name = o2.Id - err = ss.Preference().Save(&model.Preferences{preference}) - require.Nil(t, err) + nErr = ss.Preference().Save(&model.Preferences{preference}) + require.Nil(t, nErr) preference.Name = o3.Id - err = ss.Preference().Save(&model.Preferences{preference}) - require.Nil(t, err) + nErr = ss.Preference().Save(&model.Preferences{preference}) + require.Nil(t, nErr) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 1) require.Nil(t, err) @@ -2032,8 +2032,8 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) { require.Len(t, r.Order, 2, "should have 2 posts") preference.Name = o4.Id - err = ss.Preference().Save(&model.Preferences{preference}) - require.Nil(t, err) + nErr = ss.Preference().Save(&model.Preferences{preference}) + require.Nil(t, nErr) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o4.ChannelId, 0, 10) require.Nil(t, err) diff --git a/store/storetest/preference_store.go b/store/storetest/preference_store.go index f544921cab..c7e87465a3 100644 --- a/store/storetest/preference_store.go +++ b/store/storetest/preference_store.go @@ -356,15 +356,15 @@ func testPreferenceCleanupFlagsBatch(t *testing.T, ss store.Store) { Value: "true", } - err = ss.Preference().Save(&model.Preferences{preference1, preference2}) - require.Nil(t, err) + nErr := ss.Preference().Save(&model.Preferences{preference1, preference2}) + require.Nil(t, nErr) - _, err = ss.Preference().CleanupFlagsBatch(10000) - assert.Nil(t, err) + _, nErr = ss.Preference().CleanupFlagsBatch(10000) + assert.Nil(t, nErr) - _, err = ss.Preference().Get(userId, category, preference1.Name) - assert.Nil(t, err) + _, nErr = ss.Preference().Get(userId, category, preference1.Name) + assert.Nil(t, nErr) - _, err = ss.Preference().Get(userId, category, preference2.Name) - assert.NotNil(t, err) + _, nErr = ss.Preference().Get(userId, category, preference2.Name) + assert.NotNil(t, nErr) } diff --git a/store/timerlayer/timerlayer.go b/store/timerlayer/timerlayer.go index 0358c45730..d291d06c59 100644 --- a/store/timerlayer/timerlayer.go +++ b/store/timerlayer/timerlayer.go @@ -4845,7 +4845,7 @@ func (s *TimerLayerPostStore) Update(newPost *model.Post, oldPost *model.Post) ( return resultVar0, resultVar1 } -func (s *TimerLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, *model.AppError) { +func (s *TimerLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, error) { start := timemodule.Now() resultVar0, resultVar1 := s.PreferenceStore.CleanupFlagsBatch(limit) @@ -4861,7 +4861,7 @@ func (s *TimerLayerPreferenceStore) CleanupFlagsBatch(limit int64) (int64, *mode return resultVar0, resultVar1 } -func (s *TimerLayerPreferenceStore) Delete(userId string, category string, name string) *model.AppError { +func (s *TimerLayerPreferenceStore) Delete(userId string, category string, name string) error { start := timemodule.Now() resultVar0 := s.PreferenceStore.Delete(userId, category, name) @@ -4877,7 +4877,7 @@ func (s *TimerLayerPreferenceStore) Delete(userId string, category string, name return resultVar0 } -func (s *TimerLayerPreferenceStore) DeleteCategory(userId string, category string) *model.AppError { +func (s *TimerLayerPreferenceStore) DeleteCategory(userId string, category string) error { start := timemodule.Now() resultVar0 := s.PreferenceStore.DeleteCategory(userId, category) @@ -4893,7 +4893,7 @@ func (s *TimerLayerPreferenceStore) DeleteCategory(userId string, category strin return resultVar0 } -func (s *TimerLayerPreferenceStore) DeleteCategoryAndName(category string, name string) *model.AppError { +func (s *TimerLayerPreferenceStore) DeleteCategoryAndName(category string, name string) error { start := timemodule.Now() resultVar0 := s.PreferenceStore.DeleteCategoryAndName(category, name) @@ -4909,7 +4909,7 @@ func (s *TimerLayerPreferenceStore) DeleteCategoryAndName(category string, name return resultVar0 } -func (s *TimerLayerPreferenceStore) Get(userId string, category string, name string) (*model.Preference, *model.AppError) { +func (s *TimerLayerPreferenceStore) Get(userId string, category string, name string) (*model.Preference, error) { start := timemodule.Now() resultVar0, resultVar1 := s.PreferenceStore.Get(userId, category, name) @@ -4925,7 +4925,7 @@ func (s *TimerLayerPreferenceStore) Get(userId string, category string, name str return resultVar0, resultVar1 } -func (s *TimerLayerPreferenceStore) GetAll(userId string) (model.Preferences, *model.AppError) { +func (s *TimerLayerPreferenceStore) GetAll(userId string) (model.Preferences, error) { start := timemodule.Now() resultVar0, resultVar1 := s.PreferenceStore.GetAll(userId) @@ -4941,7 +4941,7 @@ func (s *TimerLayerPreferenceStore) GetAll(userId string) (model.Preferences, *m return resultVar0, resultVar1 } -func (s *TimerLayerPreferenceStore) GetCategory(userId string, category string) (model.Preferences, *model.AppError) { +func (s *TimerLayerPreferenceStore) GetCategory(userId string, category string) (model.Preferences, error) { start := timemodule.Now() resultVar0, resultVar1 := s.PreferenceStore.GetCategory(userId, category) @@ -4957,7 +4957,7 @@ func (s *TimerLayerPreferenceStore) GetCategory(userId string, category string) return resultVar0, resultVar1 } -func (s *TimerLayerPreferenceStore) PermanentDeleteByUser(userId string) *model.AppError { +func (s *TimerLayerPreferenceStore) PermanentDeleteByUser(userId string) error { start := timemodule.Now() resultVar0 := s.PreferenceStore.PermanentDeleteByUser(userId) @@ -4973,7 +4973,7 @@ func (s *TimerLayerPreferenceStore) PermanentDeleteByUser(userId string) *model. return resultVar0 } -func (s *TimerLayerPreferenceStore) Save(preferences *model.Preferences) *model.AppError { +func (s *TimerLayerPreferenceStore) Save(preferences *model.Preferences) error { start := timemodule.Now() resultVar0 := s.PreferenceStore.Save(preferences)