diff --git a/app/app.go b/app/app.go index a85737e328..95df31ea1a 100644 --- a/app/app.go +++ b/app/app.go @@ -173,3 +173,12 @@ func (a *App) SetServer(srv *Server) { func (a *App) UpdateExpiredDNDStatuses() ([]*model.Status, error) { return a.Srv().Store.Status().UpdateExpiredDNDStatuses() } + +// systemServiceAdapter provides a collection of system APIs for use by products. +type systemServiceAdapter struct { + server *Server +} + +func (ssa *systemServiceAdapter) GetDiagnosticId() string { + return ssa.server.TelemetryId() +} diff --git a/app/server.go b/app/server.go index 391ffed9e6..9c9f2ae6e0 100644 --- a/app/server.go +++ b/app/server.go @@ -103,6 +103,7 @@ const ( HooksKey ServiceKey = "hooks" KVStoreKey ServiceKey = "kvstore" StoreKey ServiceKey = "storekey" + SystemKey ServiceKey = "systemkey" ) type Server struct { @@ -404,6 +405,7 @@ func NewServer(options ...Option) (*Server, error) { CloudKey: &cloudWrapper{cloud: s.Cloud}, KVStoreKey: &kvStoreWrapper{srv: s}, StoreKey: store.NewStoreServiceAdapter(s.Store), + SystemKey: &systemServiceAdapter{server: s}, } // Step 8: Initialize products. diff --git a/app/team.go b/app/team.go index f15cd64f58..b989ee7ee1 100644 --- a/app/team.go +++ b/app/team.go @@ -34,11 +34,11 @@ type teamServiceWrapper struct { app AppIface } -func (w *teamServiceWrapper) GetMember(teamID, userID string) (*model.TeamMember, error) { +func (w *teamServiceWrapper) GetMember(teamID, userID string) (*model.TeamMember, *model.AppError) { return w.app.GetTeamMember(teamID, userID) } -func (w *teamServiceWrapper) CreateMember(ctx *request.Context, teamID, userID string) (*model.TeamMember, error) { +func (w *teamServiceWrapper) CreateMember(ctx *request.Context, teamID, userID string) (*model.TeamMember, *model.AppError) { return w.app.AddTeamMember(ctx, teamID, userID) } diff --git a/model/feature_flags.go b/model/feature_flags.go index 81aeb2a8be..13a56bf000 100644 --- a/model/feature_flags.go +++ b/model/feature_flags.go @@ -68,6 +68,9 @@ type FeatureFlags struct { CommandPalette bool AdvancedTextEditor bool + + // Enable Boards as a product (multi-product architecture) + BoardsProduct bool } func (f *FeatureFlags) SetDefaults() { @@ -93,6 +96,7 @@ func (f *FeatureFlags) SetDefaults() { f.CommandPalette = false f.AdvancedTextEditor = true f.CallsEnabled = true + f.BoardsProduct = false } func (f *FeatureFlags) Plugins() map[string]string { diff --git a/product/api.go b/product/api.go index 6e4a695252..d1bad1f3f2 100644 --- a/product/api.go +++ b/product/api.go @@ -82,14 +82,15 @@ type UserService interface { UpdateUser(user *model.User, sendNotifications bool) (*model.User, *model.AppError) GetUserByEmail(email string) (*model.User, *model.AppError) GetUserByUsername(username string) (*model.User, *model.AppError) + GetUsersFromProfiles(options *model.UserGetOptions) ([]*model.User, *model.AppError) } // TeamService provides team related utilities. // // The service shall be registered via app.TeamKey service key. type TeamService interface { - GetMember(teamID, userID string) (*model.TeamMember, error) - CreateMember(ctx *request.Context, teamID, userID string) (*model.TeamMember, error) + GetMember(teamID, userID string) (*model.TeamMember, *model.AppError) + CreateMember(ctx *request.Context, teamID, userID string) (*model.TeamMember, *model.AppError) } // BotService is just a copy implementation of mattermost-plugin-api EnsureBot method. @@ -175,3 +176,10 @@ type LogService interface { type StoreService interface { GetMasterDB() *sql.DB } + +// SystemService is the API for accessing the System service APIs. +// +// The service shall be registered via app.SystemKey service key. +type SystemService interface { + GetDiagnosticId() string +}