diff --git a/app/channels.go b/app/channels.go index 332f975922..4bb8cd7de0 100644 --- a/app/channels.go +++ b/app/channels.go @@ -226,6 +226,10 @@ func NewChannels(s *Server, services map[ServiceKey]any) (*Channels, error) { services[UserKey] = &App{ch: ch} + services[PreferencesKey] = &preferencesServiceWrapper{ + app: &App{ch: ch}, + } + return ch, nil } diff --git a/app/preference.go b/app/preference.go index f86a40a615..c6bfee0b58 100644 --- a/app/preference.go +++ b/app/preference.go @@ -9,8 +9,29 @@ import ( "net/http" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/product" ) +// Ensure preferences service wrapper implements `product.PreferencesService` +var _ product.PreferencesService = (*preferencesServiceWrapper)(nil) + +// preferencesServiceWrapper provides an implementation of `product.PreferencesService` for use by products. +type preferencesServiceWrapper struct { + app AppIface +} + +func (w *preferencesServiceWrapper) GetPreferencesForUser(userID string) (model.Preferences, *model.AppError) { + return w.app.GetPreferencesForUser(userID) +} + +func (w *preferencesServiceWrapper) UpdatePreferencesForUser(userID string, preferences model.Preferences) *model.AppError { + return w.app.UpdatePreferences(userID, preferences) +} + +func (w *preferencesServiceWrapper) DeletePreferencesForUser(userID string, preferences model.Preferences) *model.AppError { + return w.app.DeletePreferences(userID, preferences) +} + func (a *App) GetPreferencesForUser(userID string) (model.Preferences, *model.AppError) { preferences, err := a.Srv().Store.Preference().GetAll(userID) if err != nil { diff --git a/app/server.go b/app/server.go index e00d8743c9..bcb0e63c97 100644 --- a/app/server.go +++ b/app/server.go @@ -103,6 +103,7 @@ const ( KVStoreKey ServiceKey = "kvstore" StoreKey ServiceKey = "storekey" SystemKey ServiceKey = "systemkey" + PreferencesKey ServiceKey = "preferenceskey" ) type Server struct { diff --git a/product/api.go b/product/api.go index 33da6c5899..4b4ec8a93c 100644 --- a/product/api.go +++ b/product/api.go @@ -179,3 +179,12 @@ type StoreService interface { type SystemService interface { GetDiagnosticId() string } + +// PreferencesService is the API for accessing the Preferences service APIs. +// +// The service shall be registered via app.PreferencesKey service key. +type PreferencesService interface { + GetPreferencesForUser(userID string) (model.Preferences, *model.AppError) + UpdatePreferencesForUser(userID string, preferences model.Preferences) *model.AppError + DeletePreferencesForUser(userID string, preferences model.Preferences) *model.AppError +}