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  }