From dcc72c4c61054356dcf3074eae12b032ba38a2c7 Mon Sep 17 00:00:00 2001 From: Jesse Hallam Date: Thu, 19 Jun 2025 21:48:12 -0300 Subject: [PATCH] MM-63728: simplify category store with graphql gone (#30848) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * move category permissions to api In https://github.com/mattermost/mattermost/pull/21038, we changed the behaviour of the channel category store to filter out deleted teams and teams for which the user was not a member. This was necessary in part due to querying multiple teams via GraphQL. With GraphQL no longer supported, let's move the permissions to the API instead and remove the `JOIN` to filter out teams in the store. Note that we /don't/ prevent access to deleted teams. For better or worse, deleted teams remain largely accessible via other API endpoints anyway. * remove ExcludeTeam / GraphQL support As part of https://github.com/mattermost/mattermost/pull/20353, we added `ExcludeTeam` and the associated logic to support a GraphQL API. With GraphQL no longer supported, let's simplify this logic and remove the filtering and associated complexity. * Fix shadow variable declaration in channel_store_categories.go Fixed golangci-lint error by reusing existing err variable rather than shadowing it. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude * fix build issue * Remove SidebarCategorySearchOpts and simplify API to use teamID string Per code review feedback, this change removes the SidebarCategorySearchOpts struct entirely since the Type field was never used in the store implementation. All methods now accept a simple teamID string parameter instead of the struct, which simplifies the API and makes the code clearer. Changes: - Remove SidebarCategorySearchOpts struct from store.go - Update CreateInitialSidebarCategories and GetSidebarCategories signatures - Update all implementations (sqlstore, retrylayer, timerlayer, mocks) - Update all callers to pass teamID string directly - Clean up unused imports 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --------- Co-authored-by: Claude --- server/channels/api4/channel_category.go | 40 ++ server/channels/api4/channel_category_test.go | 346 ++++++++++++++++++ server/channels/app/channel.go | 5 +- server/channels/app/channel_category.go | 15 +- server/channels/app/channel_test.go | 6 +- server/channels/app/team.go | 6 +- .../channels/store/retrylayer/retrylayer.go | 8 +- .../sqlstore/channel_store_categories.go | 146 ++------ server/channels/store/store.go | 12 +- .../storetest/channel_store_categories.go | 338 ++++------------- .../store/storetest/mocks/ChannelStore.go | 36 +- .../channels/store/timerlayer/timerlayer.go | 8 +- 12 files changed, 517 insertions(+), 449 deletions(-) diff --git a/server/channels/api4/channel_category.go b/server/channels/api4/channel_category.go index 517794dbc6..fd798e0430 100644 --- a/server/channels/api4/channel_category.go +++ b/server/channels/api4/channel_category.go @@ -23,6 +23,11 @@ func getCategoriesForTeamForUser(c *Context, w http.ResponseWriter, r *http.Requ return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + categories, appErr := c.App.GetSidebarCategoriesForTeamForUser(c.AppContext, c.Params.UserId, c.Params.TeamId) if appErr != nil { c.Err = appErr @@ -51,6 +56,11 @@ func createCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + auditRec := c.MakeAuditRecord("createCategoryForTeamForUser", audit.Fail) defer c.LogAuditRec(auditRec) @@ -96,6 +106,11 @@ func getCategoryOrderForTeamForUser(c *Context, w http.ResponseWriter, r *http.R return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + order, appErr := c.App.GetSidebarCategoryOrder(c.AppContext, c.Params.UserId, c.Params.TeamId) if appErr != nil { c.Err = appErr @@ -119,6 +134,11 @@ func updateCategoryOrderForTeamForUser(c *Context, w http.ResponseWriter, r *htt return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + auditRec := c.MakeAuditRecord("updateCategoryOrderForTeamForUser", audit.Fail) defer c.LogAuditRec(auditRec) @@ -159,6 +179,11 @@ func getCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Reques return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + categories, appErr := c.App.GetSidebarCategory(c.AppContext, c.Params.CategoryId) if appErr != nil { c.Err = appErr @@ -187,6 +212,11 @@ func updateCategoriesForTeamForUser(c *Context, w http.ResponseWriter, r *http.R return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + auditRec := c.MakeAuditRecord("updateCategoriesForTeamForUser", audit.Fail) defer c.LogAuditRec(auditRec) @@ -296,6 +326,11 @@ func updateCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + auditRec := c.MakeAuditRecord("updateCategoryForTeamForUser", audit.Fail) defer c.LogAuditRec(auditRec) @@ -342,6 +377,11 @@ func deleteCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req return } + if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionViewTeam) { + c.SetPermissionError(model.PermissionViewTeam) + return + } + auditRec := c.MakeAuditRecord("deleteCategoryForTeamForUser", audit.Fail) defer c.LogAuditRec(auditRec) diff --git a/server/channels/api4/channel_category_test.go b/server/channels/api4/channel_category_test.go index 4d72881aa1..9d87901694 100644 --- a/server/channels/api4/channel_category_test.go +++ b/server/channels/api4/channel_category_test.go @@ -106,6 +106,49 @@ func TestCreateCategoryForTeamForUser(t *testing.T) { }) }) + t.Run("should return error when user tries to create a category for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Now remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to create a category for the team the user is no longer a member of + category := &model.SidebarCategoryWithChannels{ + SidebarCategory: model.SidebarCategory{ + UserId: user.Id, + TeamId: team.Id, + DisplayName: "test category", + }, + } + + _, resp, err := client.CreateSidebarCategoryForTeamForUser(context.Background(), user.Id, team.Id, category) + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) + t.Run("should publish expected WS payload", func(t *testing.T) { userWSClient := th.CreateConnectedWebSocketClient(t) @@ -450,6 +493,58 @@ func TestUpdateCategoryForTeamForUser(t *testing.T) { closeBody(r) }) }) + + t.Run("should return error when user tries to update a category for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Get categories to have valid category IDs + categories, _, err := client.GetSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, "") + require.NoError(t, err) + require.NotEmpty(t, categories.Categories) + + // Store a category to use after team membership is revoked + categoryToUpdate := &model.SidebarCategoryWithChannels{ + SidebarCategory: model.SidebarCategory{ + Id: categories.Categories[0].Id, + UserId: user.Id, + TeamId: team.Id, + DisplayName: "Updated Category", + Type: categories.Categories[0].Type, + }, + Channels: categories.Categories[0].Channels, + } + + // Remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to update a category for the team after being removed + _, resp, err := client.UpdateSidebarCategoryForTeamForUser(context.Background(), user.Id, team.Id, categoryToUpdate.Id, categoryToUpdate) + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) } func TestUpdateCategoriesForTeamForUser(t *testing.T) { @@ -548,6 +643,60 @@ func TestUpdateCategoriesForTeamForUser(t *testing.T) { _, _, err = client.UpdateSidebarCategoryOrderForTeamForUser(context.Background(), user.Id, th.BasicTeam.Id, []string{categories.Order[1], categories.Order[0], "asd"}) require.Error(t, err) }) + + t.Run("should return error when user tries to update categories for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Get categories to have valid category IDs + existingCategories, _, err := client.GetSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, "") + require.NoError(t, err) + require.NotEmpty(t, existingCategories.Categories) + + // Prepare categories to update after team membership is revoked + categoriesToUpdate := []*model.SidebarCategoryWithChannels{ + { + SidebarCategory: model.SidebarCategory{ + Id: existingCategories.Categories[0].Id, + UserId: user.Id, + TeamId: team.Id, + DisplayName: "Updated Category", + Type: existingCategories.Categories[0].Type, + }, + Channels: existingCategories.Categories[0].Channels, + }, + } + + // Remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to update categories for the team after being removed + _, resp, err := client.UpdateSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, categoriesToUpdate) + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) } func TestGetCategoriesForTeamForUser(t *testing.T) { @@ -583,6 +732,34 @@ func TestGetCategoriesForTeamForUser(t *testing.T) { require.Equal(t, http.StatusForbidden, resp.StatusCode) }) + t.Run("should return error for a team the user is not a member of", func(t *testing.T) { + // Create a new user and team + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + // Log in as the new user + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Attempt to get categories for a team the user is not a member of + _, resp, err := client.GetSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, "") + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) + t.Run("should return error with invalid user id", func(t *testing.T) { _, resp, err := th.Client.GetSidebarCategoriesForTeamForUser(context.Background(), "invalid_user_id", th.BasicTeam.Id, "") require.Error(t, err) @@ -660,6 +837,45 @@ func TestGetCategoryOrderForTeamForUser(t *testing.T) { require.Error(t, err) require.Equal(t, http.StatusUnauthorized, resp.StatusCode) }) + + t.Run("should return error when user tries to get category order for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Verify the user can access categories initially + _, _, err = client.GetSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, "") + require.NoError(t, err) + + // Remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to get the category order for the team after being removed + _, resp, err := client.GetSidebarCategoryOrderForTeamForUser(context.Background(), user.Id, team.Id, "") + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) } func TestUpdateCategoryOrderForTeamForUser(t *testing.T) { @@ -779,6 +995,46 @@ func TestUpdateCategoryOrderForTeamForUser(t *testing.T) { closeBody(r) }) }) + + t.Run("should return error when user tries to update category order for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Get categories to have a valid order + categories, _, err := client.GetSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, "") + require.NoError(t, err) + require.NotEmpty(t, categories.Order) + + // Remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to update the category order for the team after being removed + _, resp, err := client.UpdateSidebarCategoryOrderForTeamForUser(context.Background(), user.Id, team.Id, categories.Order) + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) } func TestGetCategoryForTeamForUser(t *testing.T) { @@ -878,6 +1134,49 @@ func TestGetCategoryForTeamForUser(t *testing.T) { closeBody(r) }) }) + + t.Run("should return error when user tries to get category for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Get categories to have valid category IDs + categories, _, err := client.GetSidebarCategoriesForTeamForUser(context.Background(), user.Id, team.Id, "") + require.NoError(t, err) + require.NotEmpty(t, categories.Categories) + + // Store a category ID to use after team membership is revoked + categoryID := categories.Categories[0].Id + + // Remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to get a category for the team after being removed + _, resp, err := client.GetSidebarCategoryForTeamForUser(context.Background(), user.Id, team.Id, categoryID, "") + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) } func TestValidateSidebarCategory(t *testing.T) { @@ -1259,6 +1558,53 @@ func TestDeleteCategoryForTeamForUser(t *testing.T) { } } }) + + t.Run("should return error when user tries to delete a category for a team they're not a member of", func(t *testing.T) { + // Create a user + user, appErr := th.App.CreateUser(th.Context, &model.User{ + Email: th.GenerateTestEmail(), + Username: "user_" + model.NewId(), + Password: "password", + }) + require.Nil(t, appErr) + + // Create a team and add the user to it + team, appErr := th.App.CreateTeam(th.Context, &model.Team{ + DisplayName: "Team for testing", + Name: "test-team-" + model.NewId(), + Email: th.GenerateTestEmail(), + Type: model.TeamOpen, + }) + require.Nil(t, appErr) + + th.LinkUserToTeam(user, team) + + // Create a client and log in + client := th.CreateClient() + _, _, err := client.Login(context.Background(), user.Email, "password") + require.NoError(t, err) + + // Create a custom category + customCategory, _, err := client.CreateSidebarCategoryForTeamForUser(context.Background(), user.Id, team.Id, &model.SidebarCategoryWithChannels{ + SidebarCategory: model.SidebarCategory{ + UserId: user.Id, + TeamId: team.Id, + DisplayName: "Custom Category", + Type: model.SidebarCategoryCustom, + }, + }) + require.NoError(t, err) + require.NotNil(t, customCategory) + + // Remove the user from the team + appErr = th.App.RemoveUserFromTeam(th.Context, team.Id, user.Id, th.SystemAdminUser.Id) + require.Nil(t, appErr) + + // Attempt to delete the category for the team after being removed + resp, err := client.DeleteSidebarCategoryForTeamForUser(context.Background(), user.Id, team.Id, customCategory.Id) + require.Error(t, err) + require.Equal(t, http.StatusForbidden, resp.StatusCode) + }) } func setupUserForSubtest(t *testing.T, th *TestHelper) (*model.User, *model.Client4) { diff --git a/server/channels/app/channel.go b/server/channels/app/channel.go index 5ef44c817e..0e277bbf68 100644 --- a/server/channels/app/channel.go +++ b/server/channels/app/channel.go @@ -3815,10 +3815,7 @@ func (a *App) setSidebarCategoriesForConvertedGroupMessage(c request.CTX, gmConv // Now that we've deleted existing entries, we can set the channel in default "Channels" category // for all GM members for _, user := range channelUsers { - categories, appErr := a.GetSidebarCategories(c, user.Id, &store.SidebarCategorySearchOpts{ - TeamID: gmConversionRequest.TeamID, - Type: model.SidebarCategoryChannels, - }) + categories, appErr := a.GetSidebarCategories(c, user.Id, gmConversionRequest.TeamID) if appErr != nil { c.Logger().Error("Failed to search sidebar categories for user for adding converted GM") diff --git a/server/channels/app/channel_category.go b/server/channels/app/channel_category.go index cd4a67ae12..29d541a22c 100644 --- a/server/channels/app/channel_category.go +++ b/server/channels/app/channel_category.go @@ -14,8 +14,8 @@ import ( "github.com/mattermost/mattermost/server/v8/channels/store" ) -func (a *App) createInitialSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, *model.AppError) { - categories, nErr := a.Srv().Store().Channel().CreateInitialSidebarCategories(c, userID, opts) +func (a *App) createInitialSidebarCategories(c request.CTX, userID string, teamID string) (*model.OrderedSidebarCategories, *model.AppError) { + categories, nErr := a.Srv().Store().Channel().CreateInitialSidebarCategories(c, userID, teamID) if nErr != nil { return nil, model.NewAppError("createInitialSidebarCategories", "app.channel.create_initial_sidebar_categories.internal_error", nil, "", http.StatusInternalServerError).Wrap(nErr) } @@ -28,10 +28,7 @@ func (a *App) GetSidebarCategoriesForTeamForUser(c request.CTX, userID, teamID s categories, err := a.Srv().Store().Channel().GetSidebarCategoriesForTeamForUser(userID, teamID) if err == nil && len(categories.Categories) == 0 { // A user must always have categories, so migration must not have happened yet, and we should run it ourselves - categories, appErr = a.createInitialSidebarCategories(c, userID, &store.SidebarCategorySearchOpts{ - TeamID: teamID, - ExcludeTeam: false, - }) + categories, appErr = a.createInitialSidebarCategories(c, userID, teamID) if appErr != nil { return nil, appErr } @@ -50,12 +47,12 @@ func (a *App) GetSidebarCategoriesForTeamForUser(c request.CTX, userID, teamID s return categories, nil } -func (a *App) GetSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, *model.AppError) { +func (a *App) GetSidebarCategories(c request.CTX, userID string, teamID string) (*model.OrderedSidebarCategories, *model.AppError) { var appErr *model.AppError - categories, err := a.Srv().Store().Channel().GetSidebarCategories(userID, opts) + categories, err := a.Srv().Store().Channel().GetSidebarCategories(userID, teamID) if err == nil && len(categories.Categories) == 0 { // A user must always have categories, so migration must not have happened yet, and we should run it ourselves - categories, appErr = a.createInitialSidebarCategories(c, userID, opts) + categories, appErr = a.createInitialSidebarCategories(c, userID, teamID) if appErr != nil { return nil, appErr } diff --git a/server/channels/app/channel_test.go b/server/channels/app/channel_test.go index 75a4880756..e134872143 100644 --- a/server/channels/app/channel_test.go +++ b/server/channels/app/channel_test.go @@ -14,8 +14,6 @@ import ( "testing" "time" - "github.com/mattermost/mattermost/server/v8/channels/store" - "github.com/mattermost/mattermost/server/v8/channels/app/teams" "github.com/mattermost/mattermost/server/v8/channels/app/users" "github.com/mattermost/mattermost/server/v8/channels/store/sqlstore" @@ -2957,7 +2955,7 @@ func TestConvertGroupMessageToChannel(t *testing.T) { mockChannelStore.On("GetAllChannelMembersNotifyPropsForChannel", "channelidchannelidchanneli", true).Return(map[string]model.StringMap{}, nil) mockChannelStore.On("IncrementMentionCount", "", []string{}, true, false).Return(nil) mockChannelStore.On("DeleteAllSidebarChannelForChannel", "channelidchannelidchanneli").Return(nil) - mockChannelStore.On("GetSidebarCategories", "user_id_1", &store.SidebarCategorySearchOpts{TeamID: "team_id_1", ExcludeTeam: false, Type: "channels"}).Return( + mockChannelStore.On("GetSidebarCategories", "user_id_1", "team_id_1").Return( &model.OrderedSidebarCategories{ Categories: model.SidebarCategoriesWithChannels{ { @@ -2967,7 +2965,7 @@ func TestConvertGroupMessageToChannel(t *testing.T) { }, }, }, nil) - mockChannelStore.On("GetSidebarCategories", "user_id_2", &store.SidebarCategorySearchOpts{TeamID: "team_id_1", ExcludeTeam: false, Type: "channels"}).Return( + mockChannelStore.On("GetSidebarCategories", "user_id_2", "team_id_1").Return( &model.OrderedSidebarCategories{ Categories: model.SidebarCategoriesWithChannels{ { diff --git a/server/channels/app/team.go b/server/channels/app/team.go index 0aa3466e05..8f8466db60 100644 --- a/server/channels/app/team.go +++ b/server/channels/app/team.go @@ -767,11 +767,7 @@ func (a *App) JoinUserToTeam(c request.CTX, team *model.Team, user *model.User, return nil, model.NewAppError("JoinUserToTeam", "app.user.update_update.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - if _, err := a.createInitialSidebarCategories(c, user.Id, opts); err != nil { + if _, err := a.createInitialSidebarCategories(c, user.Id, team.Id); err != nil { c.Logger().Warn( "Encountered an issue creating default sidebar categories.", mlog.String("user_id", user.Id), diff --git a/server/channels/store/retrylayer/retrylayer.go b/server/channels/store/retrylayer/retrylayer.go index 012a6211de..c741804a33 100644 --- a/server/channels/store/retrylayer/retrylayer.go +++ b/server/channels/store/retrylayer/retrylayer.go @@ -1193,11 +1193,11 @@ func (s *RetryLayerChannelStore) CreateDirectChannel(ctx request.CTX, userID *mo } -func (s *RetryLayerChannelStore) CreateInitialSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { +func (s *RetryLayerChannelStore) CreateInitialSidebarCategories(c request.CTX, userID string, teamID string) (*model.OrderedSidebarCategories, error) { tries := 0 for { - result, err := s.ChannelStore.CreateInitialSidebarCategories(c, userID, opts) + result, err := s.ChannelStore.CreateInitialSidebarCategories(c, userID, teamID) if err == nil { return result, nil } @@ -2354,11 +2354,11 @@ func (s *RetryLayerChannelStore) GetPublicChannelsForTeam(teamID string, offset } -func (s *RetryLayerChannelStore) GetSidebarCategories(userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { +func (s *RetryLayerChannelStore) GetSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) { tries := 0 for { - result, err := s.ChannelStore.GetSidebarCategories(userID, opts) + result, err := s.ChannelStore.GetSidebarCategories(userID, teamID) if err == nil { return result, nil } diff --git a/server/channels/store/sqlstore/channel_store_categories.go b/server/channels/store/sqlstore/channel_store_categories.go index 94d9356fff..9b15e137ac 100644 --- a/server/channels/store/sqlstore/channel_store_categories.go +++ b/server/channels/store/sqlstore/channel_store_categories.go @@ -16,27 +16,18 @@ import ( "github.com/mattermost/mattermost/server/v8/channels/store" ) -func (s SqlChannelStore) CreateInitialSidebarCategories(c request.CTX, userId string, opts *store.SidebarCategorySearchOpts) (_ *model.OrderedSidebarCategories, err error) { +func (s SqlChannelStore) CreateInitialSidebarCategories(c request.CTX, userId string, teamID string) (_ *model.OrderedSidebarCategories, err error) { transaction, err := s.GetMaster().Beginx() if err != nil { return nil, errors.Wrap(err, "CreateInitialSidebarCategories: begin_transaction") } defer finalizeTransactionX(transaction, &err) - teamsWithExclude, err := s.SqlStore.stores.team.GetTeamsForUser(c, userId, opts.TeamID, false) - if err != nil { - return nil, errors.Wrap(err, "CreateInitialSidebarCategories: GetTeamsForUser") - } - excludedTeamIDs := make([]string, 0, len(teamsWithExclude)) - for _, tm := range teamsWithExclude { - excludedTeamIDs = append(excludedTeamIDs, tm.TeamId) - } - - if err = s.createInitialSidebarCategoriesT(transaction, userId, excludedTeamIDs, opts); err != nil { + if err = s.createInitialSidebarCategoriesT(transaction, userId, teamID); err != nil { return nil, errors.Wrap(err, "CreateInitialSidebarCategories: createInitialSidebarCategoriesT") } - oc, err := s.getSidebarCategoriesT(transaction, userId, opts) + oc, err := s.getSidebarCategoriesT(transaction, userId, teamID) if err != nil { return nil, errors.Wrap(err, "CreateInitialSidebarCategories: getSidebarCategoriesT") } @@ -48,9 +39,9 @@ func (s SqlChannelStore) CreateInitialSidebarCategories(c request.CTX, userId st return oc, nil } -func (s SqlChannelStore) createInitialSidebarCategoriesT(transaction *sqlxTxWrapper, userId string, excludedTeamIDs []string, opts *store.SidebarCategorySearchOpts) error { +func (s SqlChannelStore) createInitialSidebarCategoriesT(transaction *sqlxTxWrapper, userId, teamId string) error { query := s.getQueryBuilder(). - Select("SidebarCategories.Type, SidebarCategories.TeamId"). + Select("SidebarCategories.Type"). From("SidebarCategories"). Where(sq.Eq{ "SidebarCategories.UserId": userId, @@ -59,34 +50,18 @@ func (s SqlChannelStore) createInitialSidebarCategoriesT(transaction *sqlxTxWrap model.SidebarCategoryChannels, model.SidebarCategoryDirectMessages, }, + "SidebarCategories.TeamId": teamId, }) - if !opts.ExcludeTeam { - query = query.Where(sq.Eq{"SidebarCategories.TeamId": opts.TeamID}) - } else { - query = query.Where(sq.NotEq{"SidebarCategories.TeamId": opts.TeamID}) - } - - selectQuery, selectParams, err := query.ToSql() - if err != nil { - return errors.Wrap(err, "createInitialSidebarCategoriesT_Tosql") - } - - existingTypes := []struct { - Type model.SidebarCategoryType - TeamId string - }{} - err = transaction.Select(&existingTypes, selectQuery, selectParams...) + existingTypes := []model.SidebarCategoryType{} + err := transaction.SelectBuilder(&existingTypes, query) if err != nil { return errors.Wrap(err, "createInitialSidebarCategoriesT: failed to select existing categories") } - hasCategoryOfType := make(map[model.SidebarCategoryType]map[string]bool, len(existingTypes)) + hasCategoryOfType := make(map[model.SidebarCategoryType]bool, len(existingTypes)) for _, existingType := range existingTypes { - if hasCategoryOfType[existingType.Type] == nil { - hasCategoryOfType[existingType.Type] = make(map[string]bool) - hasCategoryOfType[existingType.Type][existingType.TeamId] = true - } + hasCategoryOfType[existingType] = true } insertBuilder := s.getQueryBuilder().Insert("SidebarCategories"). @@ -94,71 +69,33 @@ func (s SqlChannelStore) createInitialSidebarCategoriesT(transaction *sqlxTxWrap hasInsert := false - getRequiredTeamIDs := func(category model.SidebarCategoryType, opts *store.SidebarCategorySearchOpts) []string { - // if category == nil - nothing - // if not exclude - just that team - // otherwise get all teams excluding that team - // if != nil - then partial - // if not exclude, and team exists in map then skip. - // otherwise, get all teams excluding that team, subtract all items from map. - if hasCategoryOfType[category] == nil { - // If not exclude, do for only single team - // if exclude, get all teams, excluding that team - if !opts.ExcludeTeam { - return []string{opts.TeamID} - } - return excludedTeamIDs - } - mapEntry := hasCategoryOfType[category] - if !opts.ExcludeTeam && mapEntry[opts.TeamID] { - // continue, nothing to do since entry already exists. - } else { - for i, tID := range excludedTeamIDs { - if mapEntry[tID] { - // remove from slice - copy(excludedTeamIDs[i:], excludedTeamIDs[i+1:]) - excludedTeamIDs[len(excludedTeamIDs)-1] = "" - excludedTeamIDs = excludedTeamIDs[:len(excludedTeamIDs)-1] - } - } - return excludedTeamIDs - } - return []string{} - } - - teamIDs := getRequiredTeamIDs(model.SidebarCategoryFavorites, opts) - for _, teamID := range teamIDs { + if !hasCategoryOfType[model.SidebarCategoryFavorites] { // Use deterministic IDs for default categories to prevent potentially creating multiple copies of a default category - favoritesCategoryId := fmt.Sprintf("%s_%s_%s", model.SidebarCategoryFavorites, userId, teamID) + favoritesCategoryId := fmt.Sprintf("%s_%s_%s", model.SidebarCategoryFavorites, userId, teamId) // Create the SidebarChannels first since there's more opportunity for something to fail here - if err := s.migrateFavoritesToSidebarT(transaction, userId, teamID, favoritesCategoryId); err != nil { + err = s.migrateFavoritesToSidebarT(transaction, userId, teamId, favoritesCategoryId) + if err != nil { return errors.Wrap(err, "createInitialSidebarCategoriesT: failed to migrate favorites to sidebar") } - insertBuilder = insertBuilder.Values(favoritesCategoryId, userId, teamID, model.DefaultSidebarSortOrderFavorites, model.SidebarCategorySortDefault, model.SidebarCategoryFavorites, "Favorites" /* This will be retranslated by the client into the user's locale */, false, false) + insertBuilder = insertBuilder.Values(favoritesCategoryId, userId, teamId, model.DefaultSidebarSortOrderFavorites, model.SidebarCategorySortDefault, model.SidebarCategoryFavorites, "Favorites" /* This will be retranslated by the client into the user's locale */, false, false) hasInsert = true } - teamIDs = getRequiredTeamIDs(model.SidebarCategoryChannels, opts) - for _, teamID := range teamIDs { - channelsCategoryId := fmt.Sprintf("%s_%s_%s", model.SidebarCategoryChannels, userId, teamID) - insertBuilder = insertBuilder.Values(channelsCategoryId, userId, teamID, model.DefaultSidebarSortOrderChannels, model.SidebarCategorySortDefault, model.SidebarCategoryChannels, "Channels" /* This will be retranslated by the client into the user's locale */, false, false) + if !hasCategoryOfType[model.SidebarCategoryChannels] { + channelsCategoryId := fmt.Sprintf("%s_%s_%s", model.SidebarCategoryChannels, userId, teamId) + insertBuilder = insertBuilder.Values(channelsCategoryId, userId, teamId, model.DefaultSidebarSortOrderChannels, model.SidebarCategorySortDefault, model.SidebarCategoryChannels, "Channels" /* This will be retranslated by the client into the user's locale */, false, false) hasInsert = true } - teamIDs = getRequiredTeamIDs(model.SidebarCategoryDirectMessages, opts) - for _, teamID := range teamIDs { - directMessagesCategoryId := fmt.Sprintf("%s_%s_%s", model.SidebarCategoryDirectMessages, userId, teamID) - insertBuilder = insertBuilder.Values(directMessagesCategoryId, userId, teamID, model.DefaultSidebarSortOrderDMs, model.SidebarCategorySortRecent, model.SidebarCategoryDirectMessages, "Direct Messages" /* This will be retranslated by the client into the user's locale */, false, false) + if !hasCategoryOfType[model.SidebarCategoryDirectMessages] { + directMessagesCategoryId := fmt.Sprintf("%s_%s_%s", model.SidebarCategoryDirectMessages, userId, teamId) + insertBuilder = insertBuilder.Values(directMessagesCategoryId, userId, teamId, model.DefaultSidebarSortOrderDMs, model.SidebarCategorySortRecent, model.SidebarCategoryDirectMessages, "Direct Messages" /* This will be retranslated by the client into the user's locale */, false, false) hasInsert = true } if hasInsert { - sql, args, err := insertBuilder.ToSql() - if err != nil { - return errors.Wrap(err, "insertSidebarCategories_Tosql") - } - _, err = transaction.Exec(sql, args...) + _, err = transaction.ExecBuilder(insertBuilder) if err != nil { return errors.Wrap(err, "createInitialSidebarCategoriesT: failed to insert categories") } @@ -300,11 +237,7 @@ func (s SqlChannelStore) CreateSidebarCategory(userId, teamId string, newCategor defer finalizeTransactionX(transaction, &err) - opts := &store.SidebarCategorySearchOpts{ - TeamID: teamId, - ExcludeTeam: false, - } - categoriesWithOrder, err := s.getSidebarCategoriesT(transaction, userId, opts) + categoriesWithOrder, err := s.getSidebarCategoriesT(transaction, userId, teamId) if err != nil { return nil, err } else if len(categoriesWithOrder.Categories) == 0 { @@ -590,7 +523,7 @@ func (s SqlChannelStore) getSidebarCategoryT(db sqlxExecutor, categoryId string) return s.completePopulatingCategoryT(db, result) } -func (s SqlChannelStore) getSidebarCategoriesT(db sqlxExecutor, userId string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { +func (s SqlChannelStore) getSidebarCategoriesT(db sqlxExecutor, userId, teamId string) (*model.OrderedSidebarCategories, error) { oc := model.OrderedSidebarCategories{ Categories: make(model.SidebarCategoriesWithChannels, 0), Order: make([]string, 0), @@ -600,35 +533,18 @@ func (s SqlChannelStore) getSidebarCategoriesT(db sqlxExecutor, userId string, o query := s.sidebarCategorySelectQuery. Columns("SidebarChannels.ChannelId"). LeftJoin("SidebarChannels ON SidebarChannels.CategoryId=SidebarCategories.Id"). - InnerJoin("Teams ON Teams.Id=SidebarCategories.TeamId"). - InnerJoin("TeamMembers ON TeamMembers.TeamId=SidebarCategories.TeamId"). - Where(sq.And{ - sq.Eq{"TeamMembers.UserId": userId}, - sq.Eq{"TeamMembers.DeleteAt": 0}, - sq.Eq{"Teams.DeleteAt": 0}, - }). Where(sq.And{ sq.Eq{"SidebarCategories.UserId": userId}, + sq.Eq{"SidebarCategories.TeamId": teamId}, }). OrderBy("SidebarCategories.SortOrder ASC, SidebarChannels.SortOrder ASC") - - if opts.ExcludeTeam { - query = query.Where(sq.NotEq{"SidebarCategories.TeamId": opts.TeamID}) - } else { - query = query.Where(sq.Eq{"SidebarCategories.TeamId": opts.TeamID}) - } - - if opts.Type != "" { - query = query.Where(sq.Eq{"SidebarCategories.Type": opts.Type}) - } - sql, args, err := query.ToSql() if err != nil { return nil, errors.Wrap(err, "sidebar_categories_tosql") } if err := db.Select(&categories, sql, args...); err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("failed to get categories for userId=%s, teamId=%s", userId, opts.TeamID)) + return nil, errors.Wrap(err, fmt.Sprintf("failed to get categories for userId=%s, teamId=%s", userId, teamId)) } for _, category := range categories { @@ -660,15 +576,11 @@ func (s SqlChannelStore) getSidebarCategoriesT(db sqlxExecutor, userId string, o } func (s SqlChannelStore) GetSidebarCategoriesForTeamForUser(userId, teamId string) (*model.OrderedSidebarCategories, error) { - opts := &store.SidebarCategorySearchOpts{ - TeamID: teamId, - ExcludeTeam: false, - } - return s.getSidebarCategoriesT(s.GetReplica(), userId, opts) + return s.getSidebarCategoriesT(s.GetReplica(), userId, teamId) } -func (s SqlChannelStore) GetSidebarCategories(userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { - return s.getSidebarCategoriesT(s.GetReplica(), userID, opts) +func (s SqlChannelStore) GetSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) { + return s.getSidebarCategoriesT(s.GetReplica(), userID, teamID) } func (s SqlChannelStore) GetSidebarCategoryOrder(userId, teamId string) ([]string, error) { diff --git a/server/channels/store/store.go b/server/channels/store/store.go index 86ee08a3c1..7047de907b 100644 --- a/server/channels/store/store.go +++ b/server/channels/store/store.go @@ -289,9 +289,9 @@ type ChannelStore interface { MigrateChannelMembers(fromChannelID string, fromUserID string) (map[string]string, error) ResetAllChannelSchemes() error ClearAllCustomRoleAssignments() error - CreateInitialSidebarCategories(c request.CTX, userID string, opts *SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) + CreateInitialSidebarCategories(c request.CTX, userID string, teamID string) (*model.OrderedSidebarCategories, error) GetSidebarCategoriesForTeamForUser(userID, teamID string) (*model.OrderedSidebarCategories, error) - GetSidebarCategories(userID string, opts *SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) + GetSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) GetSidebarCategory(categoryID string) (*model.SidebarCategoryWithChannels, error) GetSidebarCategoryOrder(userID, teamID string) ([]string, error) CreateSidebarCategory(userID, teamID string, newCategory *model.SidebarCategoryWithChannels) (*model.SidebarCategoryWithChannels, error) @@ -1220,14 +1220,6 @@ type PostReminderMetadata struct { Username string } -// SidebarCategorySearchOpts contains the options for a graphQL query -// to get the sidebar categories. -type SidebarCategorySearchOpts struct { - TeamID string - ExcludeTeam bool - Type model.SidebarCategoryType -} - type ThreadMembershipImportData struct { // LastViewed is the timestamp to set the LastViewed field to. LastViewed int64 diff --git a/server/channels/store/storetest/channel_store_categories.go b/server/channels/store/storetest/channel_store_categories.go index 23a2db61dd..6bf0f41a18 100644 --- a/server/channels/store/storetest/channel_store_categories.go +++ b/server/channels/store/storetest/channel_store_categories.go @@ -63,12 +63,7 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) assert.NoError(t, nErr) require.Len(t, res.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type) @@ -86,15 +81,11 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store team := setupTeam(t, rctx, ss, userID, userID2) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) - res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID2, opts) + res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID2, team.Id) assert.NoError(t, nErr) assert.Len(t, res.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type) @@ -112,19 +103,11 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store team := setupTeam(t, rctx, ss, userID) team2 := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) - opts = &store.SidebarCategorySearchOpts{ - TeamID: team2.Id, - ExcludeTeam: false, - } - res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, team2.Id) assert.NoError(t, nErr) assert.Len(t, res.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, res.Categories[0].Type) @@ -141,11 +124,7 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -154,7 +133,7 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store require.Equal(t, res, initialCategories) // Calling CreateInitialSidebarCategories a second time shouldn't create any new categories - res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) assert.NoError(t, nErr) assert.NotEmpty(t, res) @@ -176,11 +155,7 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store go func() { defer wg.Done() - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - _, _ = ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + _, _ = ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) }() } @@ -234,11 +209,8 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store require.NoError(t, nErr) // Create the categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the categories + categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.Len(t, categories.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, categories.Categories[0].Type) @@ -303,11 +275,8 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store require.NoError(t, nErr) // Create the categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the categories + categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.Len(t, categories.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, categories.Categories[0].Type) @@ -371,11 +340,8 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store require.NoError(t, err) // Create the categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the categories + categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.Len(t, categories.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, categories.Categories[0].Type) @@ -420,11 +386,8 @@ func testCreateInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store require.NoError(t, nErr) // Create the categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the categories + categories, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.Len(t, categories.Categories, 3) assert.Equal(t, model.SidebarCategoryFavorites, categories.Categories[0].Type) @@ -461,11 +424,7 @@ func testCreateSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store) { team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -491,11 +450,7 @@ func testCreateSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store) { team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -532,11 +487,7 @@ func testCreateSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store) { userID := model.NewId() team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -574,11 +525,7 @@ func testCreateSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store) { userID := model.NewId() team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -639,11 +586,7 @@ func testCreateSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store) { team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) // Create the category @@ -676,11 +619,7 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq channelID2 := model.NewId() channelID3 := model.NewId() - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -710,11 +649,8 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the channels category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the channels category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -778,11 +714,8 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the channels category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the channels category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -820,12 +753,8 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq userID := model.NewId() team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } // Create the initial categories and find the channels category - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -888,11 +817,8 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the DMs category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the DMs category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -933,11 +859,8 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the DMs category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the DMs category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -975,11 +898,8 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the DMs category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the DMs category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1009,11 +929,7 @@ func testGetSidebarCategory(t *testing.T, rctx request.CTX, ss store.Store, s Sq // Create another team and assign the DM to a custom category on that team otherTeam := setupTeam(t, rctx, ss, userID) - opts = &store.SidebarCategorySearchOpts{ - TeamID: otherTeam.Id, - ExcludeTeam: false, - } - res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, otherTeam.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1040,11 +956,7 @@ func testGetSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) { userID := model.NewId() team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1074,66 +986,6 @@ func testGetSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) { assert.Equal(t, gotCategory.Channels, res.Categories[1].Channels) assert.Equal(t, channelIds, res.Categories[1].Channels) }) - t.Run("should not return categories for teams deleted, or no longer a member", func(t *testing.T) { - userID := model.NewId() - - teamMember1 := setupTeam(t, rctx, ss, userID) - teamMember2 := setupTeam(t, rctx, ss, userID) - teamDeleted := setupTeam(t, rctx, ss, userID) - teamDeleted.DeleteAt = model.GetMillis() - ss.Team().Update(teamDeleted) - teamNotMember := setupTeam(t, rctx, ss) - teamDeletedMember := setupTeam(t, rctx, ss, userID) - - members, err := ss.Team().GetMembersByIds(teamDeletedMember.Id, []string{userID}, nil) - require.NoError(t, err) - require.NotEmpty(t, members) - member := members[0] - member.DeleteAt = model.GetMillis() - ss.Team().UpdateMember(rctx, member) - - teamIds := []string{ - teamMember1.Id, - teamMember2.Id, - teamDeleted.Id, - teamNotMember.Id, - teamDeletedMember.Id, - } - - for _, id := range teamIds { - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, &store.SidebarCategorySearchOpts{TeamID: id}) - require.NoError(t, nErr) - require.NotEmpty(t, res) - } - - opts := &store.SidebarCategorySearchOpts{ - TeamID: teamMember1.Id, - ExcludeTeam: false, - } - - // Team member and not exclude - res, err := ss.Channel().GetSidebarCategories(userID, opts) - require.NoError(t, err) - assert.Equal(t, 3, len(res.Categories)) - - // No team member and not exclude - opts.TeamID = teamDeleted.Id - res, err = ss.Channel().GetSidebarCategories(userID, opts) - require.NoError(t, err) - assert.Equal(t, 0, len(res.Categories)) - - // No team member and exclude - opts.ExcludeTeam = true - res, err = ss.Channel().GetSidebarCategories(userID, opts) - require.NoError(t, err) - assert.Equal(t, 6, len(res.Categories)) - - // Team member and exclude - opts.TeamID = teamMember1.Id - res, err = ss.Channel().GetSidebarCategories(userID, opts) - require.NoError(t, err) - assert.Equal(t, 3, len(res.Categories)) - }) } func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) { @@ -1142,11 +994,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) team := setupTeam(t, rctx, ss, userID) // Create the initial categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories + res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, err) require.NotEmpty(t, res) @@ -1180,11 +1029,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) team := setupTeam(t, rctx, ss, userID) // Create the initial categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories + res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, err) require.NotEmpty(t, res) @@ -1211,11 +1057,7 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) userID := model.NewId() team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1282,11 +1124,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the favorites category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the favorites category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1347,11 +1186,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) team := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the favorites category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the favorites category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1418,11 +1254,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) team2 := setupTeam(t, rctx, ss, userID) // Create the initial categories and find the favorites categories in each team - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the favorites categories in each team + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1432,11 +1265,7 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) favoritesCategory := categories.Categories[0] require.Equal(t, model.SidebarCategoryFavorites, favoritesCategory.Type) - opts = &store.SidebarCategorySearchOpts{ - TeamID: team2.Id, - ExcludeTeam: false, - } - res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID, team2.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1527,11 +1356,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) team := setupTeam(t, rctx, ss, userID, userID2) // Create the initial categories and find the favorites category - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories and find the favorites category + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1544,7 +1370,7 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) require.Equal(t, model.SidebarCategoryChannels, channelsCategory.Type) // Create the other users' categories - res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID2, opts) + res, nErr = ss.Channel().CreateInitialSidebarCategories(rctx, userID2, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1701,11 +1527,7 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) ) require.NoError(t, nErr) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1760,11 +1582,7 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) ) require.NoError(t, nErr) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1852,11 +1670,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) require.NoError(t, err) // And then create the initial categories so that it includes the channel - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // And then create the initial categories so that it includes the channel + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1920,11 +1735,8 @@ func testUpdateSidebarCategories(t *testing.T, rctx request.CTX, ss store.Store) require.NoError(t, err) // And then create the initial categories so that Channels includes the channel - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // And then create the initial categories so that Channels includes the channel + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -1982,11 +1794,7 @@ func setupInitialSidebarCategories(t *testing.T, rctx request.CTX, ss store.Stor userID := model.NewId() team := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -2109,11 +1917,7 @@ func testClearSidebarOnTeamLeave(t *testing.T, rctx request.CTX, ss store.Store, // Create a second team and set up the sidebar categories for it team2 := setupTeam(t, rctx, ss, userID) - opts := &store.SidebarCategorySearchOpts{ - TeamID: team2.Id, - ExcludeTeam: false, - } - res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team2.Id) require.NoError(t, err) require.NotEmpty(t, res) @@ -2300,11 +2104,7 @@ func testUpdateSidebarChannelsByPreferences(t *testing.T, rctx request.CTX, ss s userID := model.NewId() teamID := model.NewId() - opts := &store.SidebarCategorySearchOpts{ - TeamID: teamID, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, teamID) require.NoError(t, nErr) require.NotEmpty(t, res) @@ -2329,11 +2129,7 @@ func testUpdateSidebarChannelsByPreferences(t *testing.T, rctx request.CTX, ss s userID := model.NewId() teamID := model.NewId() - opts := &store.SidebarCategorySearchOpts{ - TeamID: teamID, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, teamID) assert.NoError(t, nErr) require.NotEmpty(t, res) @@ -2371,11 +2167,8 @@ func testSidebarCategoryDeadlock(t *testing.T, rctx request.CTX, ss store.Store) require.NoError(t, err) // And then create the initial categories so that it includes the channel - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // And then create the initial categories so that it includes the channel + res, err := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, err) require.NotEmpty(t, res) @@ -2482,11 +2275,8 @@ func doTestSidebarCategoryConcurrentAccess(t *testing.T, rctx request.CTX, ss st } // Create the initial categories - opts := &store.SidebarCategorySearchOpts{ - TeamID: team.Id, - ExcludeTeam: false, - } - res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, opts) + // Create the initial categories + res, nErr := ss.Channel().CreateInitialSidebarCategories(rctx, userID, team.Id) require.NoError(t, nErr) require.NotEmpty(t, res) diff --git a/server/channels/store/storetest/mocks/ChannelStore.go b/server/channels/store/storetest/mocks/ChannelStore.go index e116e430ab..79969e1a3f 100644 --- a/server/channels/store/storetest/mocks/ChannelStore.go +++ b/server/channels/store/storetest/mocks/ChannelStore.go @@ -342,9 +342,9 @@ func (_m *ChannelStore) CreateDirectChannel(ctx request.CTX, userID *model.User, return r0, r1 } -// CreateInitialSidebarCategories provides a mock function with given fields: c, userID, opts -func (_m *ChannelStore) CreateInitialSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { - ret := _m.Called(c, userID, opts) +// CreateInitialSidebarCategories provides a mock function with given fields: c, userID, teamID +func (_m *ChannelStore) CreateInitialSidebarCategories(c request.CTX, userID string, teamID string) (*model.OrderedSidebarCategories, error) { + ret := _m.Called(c, userID, teamID) if len(ret) == 0 { panic("no return value specified for CreateInitialSidebarCategories") @@ -352,19 +352,19 @@ func (_m *ChannelStore) CreateInitialSidebarCategories(c request.CTX, userID str var r0 *model.OrderedSidebarCategories var r1 error - if rf, ok := ret.Get(0).(func(request.CTX, string, *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error)); ok { - return rf(c, userID, opts) + if rf, ok := ret.Get(0).(func(request.CTX, string, string) (*model.OrderedSidebarCategories, error)); ok { + return rf(c, userID, teamID) } - if rf, ok := ret.Get(0).(func(request.CTX, string, *store.SidebarCategorySearchOpts) *model.OrderedSidebarCategories); ok { - r0 = rf(c, userID, opts) + if rf, ok := ret.Get(0).(func(request.CTX, string, string) *model.OrderedSidebarCategories); ok { + r0 = rf(c, userID, teamID) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.OrderedSidebarCategories) } } - if rf, ok := ret.Get(1).(func(request.CTX, string, *store.SidebarCategorySearchOpts) error); ok { - r1 = rf(c, userID, opts) + if rf, ok := ret.Get(1).(func(request.CTX, string, string) error); ok { + r1 = rf(c, userID, teamID) } else { r1 = ret.Error(1) } @@ -1968,9 +1968,9 @@ func (_m *ChannelStore) GetPublicChannelsForTeam(teamID string, offset int, limi return r0, r1 } -// GetSidebarCategories provides a mock function with given fields: userID, opts -func (_m *ChannelStore) GetSidebarCategories(userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { - ret := _m.Called(userID, opts) +// GetSidebarCategories provides a mock function with given fields: userID, teamID +func (_m *ChannelStore) GetSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) { + ret := _m.Called(userID, teamID) if len(ret) == 0 { panic("no return value specified for GetSidebarCategories") @@ -1978,19 +1978,19 @@ func (_m *ChannelStore) GetSidebarCategories(userID string, opts *store.SidebarC var r0 *model.OrderedSidebarCategories var r1 error - if rf, ok := ret.Get(0).(func(string, *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error)); ok { - return rf(userID, opts) + if rf, ok := ret.Get(0).(func(string, string) (*model.OrderedSidebarCategories, error)); ok { + return rf(userID, teamID) } - if rf, ok := ret.Get(0).(func(string, *store.SidebarCategorySearchOpts) *model.OrderedSidebarCategories); ok { - r0 = rf(userID, opts) + if rf, ok := ret.Get(0).(func(string, string) *model.OrderedSidebarCategories); ok { + r0 = rf(userID, teamID) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.OrderedSidebarCategories) } } - if rf, ok := ret.Get(1).(func(string, *store.SidebarCategorySearchOpts) error); ok { - r1 = rf(userID, opts) + if rf, ok := ret.Get(1).(func(string, string) error); ok { + r1 = rf(userID, teamID) } else { r1 = ret.Error(1) } diff --git a/server/channels/store/timerlayer/timerlayer.go b/server/channels/store/timerlayer/timerlayer.go index 24ae420ec0..76b136a069 100644 --- a/server/channels/store/timerlayer/timerlayer.go +++ b/server/channels/store/timerlayer/timerlayer.go @@ -1041,10 +1041,10 @@ func (s *TimerLayerChannelStore) CreateDirectChannel(ctx request.CTX, userID *mo return result, err } -func (s *TimerLayerChannelStore) CreateInitialSidebarCategories(c request.CTX, userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { +func (s *TimerLayerChannelStore) CreateInitialSidebarCategories(c request.CTX, userID string, teamID string) (*model.OrderedSidebarCategories, error) { start := time.Now() - result, err := s.ChannelStore.CreateInitialSidebarCategories(c, userID, opts) + result, err := s.ChannelStore.CreateInitialSidebarCategories(c, userID, teamID) elapsed := float64(time.Since(start)) / float64(time.Second) if s.Root.Metrics != nil { @@ -1937,10 +1937,10 @@ func (s *TimerLayerChannelStore) GetPublicChannelsForTeam(teamID string, offset return result, err } -func (s *TimerLayerChannelStore) GetSidebarCategories(userID string, opts *store.SidebarCategorySearchOpts) (*model.OrderedSidebarCategories, error) { +func (s *TimerLayerChannelStore) GetSidebarCategories(userID string, teamID string) (*model.OrderedSidebarCategories, error) { start := time.Now() - result, err := s.ChannelStore.GetSidebarCategories(userID, opts) + result, err := s.ChannelStore.GetSidebarCategories(userID, teamID) elapsed := float64(time.Since(start)) / float64(time.Second) if s.Root.Metrics != nil {