From 6a6e05073eef02b9ba362fd98427dcba0d715f4b Mon Sep 17 00:00:00 2001 From: Doug Lauder Date: Tue, 23 Aug 2022 11:57:07 -0400 Subject: [PATCH] Add preferences service API for products (#20869) --- app/channels.go | 4 ++++ app/preference.go | 21 +++++++++++++++++++++ app/server.go | 1 + product/api.go | 9 +++++++++ 4 files changed, 35 insertions(+) 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 +}