github.com/adacta-ru/mattermost-server/v6@v6.0.0/app/preference.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "errors" 8 "net/http" 9 10 "github.com/adacta-ru/mattermost-server/v6/model" 11 ) 12 13 func (a *App) GetPreferencesForUser(userId string) (model.Preferences, *model.AppError) { 14 preferences, err := a.Srv().Store.Preference().GetAll(userId) 15 if err != nil { 16 return nil, model.NewAppError("GetPreferencesForUser", "app.preference.get_all.app_error", nil, err.Error(), http.StatusBadRequest) 17 } 18 return preferences, nil 19 } 20 21 func (a *App) GetPreferenceByCategoryForUser(userId string, category string) (model.Preferences, *model.AppError) { 22 preferences, err := a.Srv().Store.Preference().GetCategory(userId, category) 23 if err != nil { 24 return nil, model.NewAppError("GetPreferenceByCategoryForUser", "app.preference.get_category.app_error", nil, err.Error(), http.StatusBadRequest) 25 } 26 if len(preferences) == 0 { 27 err := model.NewAppError("GetPreferenceByCategoryForUser", "api.preference.preferences_category.get.app_error", nil, "", http.StatusNotFound) 28 return nil, err 29 } 30 return preferences, nil 31 } 32 33 func (a *App) GetPreferenceByCategoryAndNameForUser(userId string, category string, preferenceName string) (*model.Preference, *model.AppError) { 34 res, err := a.Srv().Store.Preference().Get(userId, category, preferenceName) 35 if err != nil { 36 return nil, model.NewAppError("GetPreferenceByCategoryAndNameForUser", "app.preference.get.app_error", nil, err.Error(), http.StatusBadRequest) 37 } 38 return res, nil 39 } 40 41 func (a *App) UpdatePreferences(userId string, preferences model.Preferences) *model.AppError { 42 for _, preference := range preferences { 43 if userId != preference.UserId { 44 return model.NewAppError("savePreferences", "api.preference.update_preferences.set.app_error", nil, 45 "userId="+userId+", preference.UserId="+preference.UserId, http.StatusForbidden) 46 } 47 } 48 49 if err := a.Srv().Store.Preference().Save(&preferences); err != nil { 50 var appErr *model.AppError 51 switch { 52 case errors.As(err, &appErr): 53 return appErr 54 default: 55 return model.NewAppError("UpdatePreferences", "app.preference.save.updating.app_error", nil, err.Error(), http.StatusBadRequest) 56 } 57 } 58 59 if err := a.Srv().Store.Channel().UpdateSidebarChannelsByPreferences(&preferences); err != nil { 60 return model.NewAppError("UpdatePreferences", "api.preference.update_preferences.update_sidebar.app_error", nil, err.Error(), http.StatusInternalServerError) 61 } 62 63 message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, "", "", userId, nil) 64 // TODO this needs to be updated to include information on which categories changed 65 a.Publish(message) 66 67 message = model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCES_CHANGED, "", "", userId, nil) 68 message.Add("preferences", preferences.ToJson()) 69 a.Publish(message) 70 71 return nil 72 } 73 74 func (a *App) DeletePreferences(userId string, preferences model.Preferences) *model.AppError { 75 for _, preference := range preferences { 76 if userId != preference.UserId { 77 err := model.NewAppError("DeletePreferences", "api.preference.delete_preferences.delete.app_error", nil, 78 "userId="+userId+", preference.UserId="+preference.UserId, http.StatusForbidden) 79 return err 80 } 81 } 82 83 for _, preference := range preferences { 84 if err := a.Srv().Store.Preference().Delete(userId, preference.Category, preference.Name); err != nil { 85 return model.NewAppError("DeletePreferences", "app.preference.delete.app_error", nil, err.Error(), http.StatusBadRequest) 86 } 87 } 88 89 if err := a.Srv().Store.Channel().DeleteSidebarChannelsByPreferences(&preferences); err != nil { 90 return model.NewAppError("DeletePreferences", "api.preference.delete_preferences.update_sidebar.app_error", nil, err.Error(), http.StatusInternalServerError) 91 } 92 93 message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED, "", "", userId, nil) 94 // TODO this needs to be updated to include information on which categories changed 95 a.Publish(message) 96 97 message = model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCES_DELETED, "", "", userId, nil) 98 message.Add("preferences", preferences.ToJson()) 99 a.Publish(message) 100 101 return nil 102 }