[MM-23017] Add check for groups to SendNotifications (#14039)
* MM-23017 Check group mentions as part of notification logic * Add nil groups to existing test cases * MM-23017 Add tests for insertGroupMention and addGroupMention * MM-23017 Add tests for getExplicitMentions that have groups * Add tests for group store GetMemberUsersNotInChannel * MM-23017 Add tests for AllowGroupMentions * MM-23017 Fix error message name * MM-23017 Swap Checks to Name * MM-23017 Code review fixes * Rename var and fix allowGroupMentions test * MM-23017 Use GetMemberUsersInTeam inside of insertGroupMentions * MM-23017 use group mentions permission * Actually call GetMemberUsersInTeam * Remove unnecessary new line * Uncomment filter allow reference * MM-23017 Fix group channel notifications * Update store layer * MM-23017 Improve test coverage for group channels * Trigger CI * Trigger CI
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
29fae242e1
Коммит
e88ba85d60
@@ -260,7 +260,7 @@ func (s *SqlGroupStore) GetMemberUsers(groupID string) ([]*model.User, *model.Ap
|
||||
AND GroupId = :GroupId`
|
||||
|
||||
if _, err := s.GetReplica().Select(&groupMembers, query, map[string]interface{}{"GroupId": groupID}); err != nil {
|
||||
return nil, model.NewAppError("SqlGroupStore.GroupGetAllBySource", "store.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
return nil, model.NewAppError("SqlGroupStore.GetMemberUsers", "store.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return groupMembers, nil
|
||||
@@ -312,6 +312,70 @@ func (s *SqlGroupStore) GetMemberCount(groupID string) (int64, *model.AppError)
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func (s *SqlGroupStore) GetMemberUsersInTeam(groupID string, teamID string) ([]*model.User, *model.AppError) {
|
||||
var groupMembers []*model.User
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
Users.*
|
||||
FROM
|
||||
GroupMembers
|
||||
JOIN Users ON Users.Id = GroupMembers.UserId
|
||||
WHERE
|
||||
GroupId = :GroupId
|
||||
AND GroupMembers.UserId IN (
|
||||
SELECT TeamMembers.UserId
|
||||
FROM TeamMembers
|
||||
JOIN Teams ON Teams.Id = :TeamId
|
||||
WHERE TeamMembers.TeamId = Teams.Id
|
||||
AND TeamMembers.DeleteAt = 0
|
||||
)
|
||||
AND GroupMembers.DeleteAt = 0
|
||||
AND Users.DeleteAt = 0
|
||||
`
|
||||
|
||||
if _, err := s.GetReplica().Select(&groupMembers, query, map[string]interface{}{"GroupId": groupID, "TeamId": teamID}); err != nil {
|
||||
return nil, model.NewAppError("SqlGroupStore.GetMemberUsersInTeam", "store.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return groupMembers, nil
|
||||
}
|
||||
|
||||
func (s *SqlGroupStore) GetMemberUsersNotInChannel(groupID string, channelID string) ([]*model.User, *model.AppError) {
|
||||
var groupMembers []*model.User
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
Users.*
|
||||
FROM
|
||||
GroupMembers
|
||||
JOIN Users ON Users.Id = GroupMembers.UserId
|
||||
WHERE
|
||||
GroupId = :GroupId
|
||||
AND GroupMembers.UserId NOT IN (
|
||||
SELECT ChannelMembers.UserId
|
||||
FROM ChannelMembers
|
||||
WHERE ChannelMembers.ChannelId = :ChannelId
|
||||
)
|
||||
AND GroupMembers.UserId IN (
|
||||
SELECT TeamMembers.UserId
|
||||
FROM TeamMembers
|
||||
JOIN Channels ON Channels.Id = :ChannelId
|
||||
JOIN Teams ON Teams.Id = Channels.TeamId
|
||||
WHERE TeamMembers.TeamId = Teams.Id
|
||||
AND TeamMembers.DeleteAt = 0
|
||||
)
|
||||
AND GroupMembers.DeleteAt = 0
|
||||
AND Users.DeleteAt = 0
|
||||
`
|
||||
|
||||
if _, err := s.GetReplica().Select(&groupMembers, query, map[string]interface{}{"GroupId": groupID, "ChannelId": channelID}); err != nil {
|
||||
return nil, model.NewAppError("SqlGroupStore.GetMemberUsersNotInChannel", "store.select_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return groupMembers, nil
|
||||
}
|
||||
|
||||
func (s *SqlGroupStore) UpsertMember(groupID string, userID string) (*model.GroupMember, *model.AppError) {
|
||||
member := &model.GroupMember{
|
||||
GroupId: groupID,
|
||||
@@ -1081,10 +1145,14 @@ func (s *SqlGroupStore) GetGroups(page, perPage int, opts model.GroupSearchOpts)
|
||||
groupsQuery = groupsQuery.
|
||||
From("UserGroups g").
|
||||
Where("g.DeleteAt = 0").
|
||||
Limit(uint64(perPage)).
|
||||
Offset(uint64(page * perPage)).
|
||||
OrderBy("g.DisplayName")
|
||||
|
||||
if perPage != 0 {
|
||||
groupsQuery = groupsQuery.
|
||||
Limit(uint64(perPage)).
|
||||
Offset(uint64(page * perPage))
|
||||
}
|
||||
|
||||
if opts.FilterAllowReference {
|
||||
groupsQuery = groupsQuery.Where("g.AllowReference = true")
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user