MM-44088: Add teamID filter to channelMembers (#20176)
We add 2 new params to channel members query. 1. Filter by teamId. 2. Negate that filter. We include some more optimizations like: - Moved the team role checks inside the dataloader. - Moved the channel pretty name computation inside the loader. Now that we load less data on initial load, we can reduce the concurrency requirement to be a bit on the safer side. ```release-note NONE ```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
5ac3dbf058
Коммит
a6d8e45297
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/graph-gophers/dataloader/v6"
|
||||
"github.com/mattermost/mattermost-server/v6/app"
|
||||
"github.com/mattermost/mattermost-server/v6/model"
|
||||
"github.com/mattermost/mattermost-server/v6/store"
|
||||
"github.com/mattermost/mattermost-server/v6/web"
|
||||
)
|
||||
|
||||
@@ -211,7 +212,9 @@ func (*resolver) ChannelsLeft(ctx context.Context, args struct {
|
||||
// match with api4.getChannelMember
|
||||
func (*resolver) ChannelMembers(ctx context.Context, args struct {
|
||||
UserID string
|
||||
TeamID string
|
||||
ChannelID string
|
||||
ExcludeTeam bool
|
||||
First int32
|
||||
After string
|
||||
LastUpdateAt float64
|
||||
@@ -263,7 +266,29 @@ func (*resolver) ChannelMembers(ctx context.Context, args struct {
|
||||
}
|
||||
}
|
||||
|
||||
members, err := c.App.Srv().Store.Channel().GetMembersForUserWithCursor(args.UserID, afterChannel, afterUser, limit, int(args.LastUpdateAt))
|
||||
if args.TeamID != "" {
|
||||
if !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), args.TeamID, model.PermissionViewTeam) {
|
||||
primaryTeam := *c.App.Config().TeamSettings.ExperimentalPrimaryTeam
|
||||
if primaryTeam != "" {
|
||||
team, appErr := c.App.GetTeamByName(primaryTeam)
|
||||
if appErr != nil {
|
||||
return []*channelMember{}, appErr
|
||||
}
|
||||
args.TeamID = team.Id
|
||||
} else {
|
||||
return []*channelMember{}, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
opts := &store.ChannelMemberGraphQLSearchOpts{
|
||||
AfterChannel: afterChannel,
|
||||
AfterUser: afterUser,
|
||||
Limit: limit,
|
||||
LastUpdateAt: int(args.LastUpdateAt),
|
||||
ExcludeTeam: args.ExcludeTeam,
|
||||
}
|
||||
members, err := c.App.Srv().Store.Channel().GetMembersForUserWithCursor(args.UserID, args.TeamID, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user