migrate groupsBySyncableBaseQuery (#30926)

Этот коммит содержится в:
Jesse Hallam
2025-05-12 15:03:02 -03:00
коммит произвёл GitHub
родитель 6b48c67eeb
Коммит f302b9844e

Просмотреть файл

@@ -1284,34 +1284,42 @@ func (s *SqlGroupStore) ChannelMembersToRemove(channelID *string) ([]*model.Chan
}
func (s *SqlGroupStore) groupsBySyncableBaseQuery(st model.GroupSyncableType, t selectType, syncableID string, opts model.GroupSearchOpts) sq.SelectBuilder {
selectStrs := map[selectType]string{
selectGroups: "UserGroups.*, gs.SchemeAdmin AS SyncableSchemeAdmin",
selectCountGroups: "COUNT(*)",
var query sq.SelectBuilder
switch t {
case selectGroups:
query = s.userGroupsSelectQuery.
Column("gs.SchemeAdmin AS SyncableSchemeAdmin")
case selectCountGroups:
query = s.getQueryBuilder().
Select("COUNT(*)").
From("UserGroups")
}
var table string
var idCol string
if st == model.GroupSyncableTypeTeam {
table = "GroupTeams"
idCol = "TeamId"
query = query.
Join("GroupTeams gs ON gs.GroupId = UserGroups.Id").
Where(sq.Eq{
"gs.TeamId": syncableID,
"gs.DeleteAt": 0,
})
} else {
table = "GroupChannels"
idCol = "ChannelId"
query = query.
Join("GroupChannels gs ON gs.GroupId = UserGroups.Id").
Where(sq.Eq{
"gs.ChannelId": syncableID,
"gs.DeleteAt": 0,
})
}
query := s.getQueryBuilder().
Select(selectStrs[t]).
From(fmt.Sprintf("%s gs", table)).
LeftJoin("UserGroups ON gs.GroupId = UserGroups.Id").
Where(fmt.Sprintf("UserGroups.DeleteAt = 0 AND gs.%s = ? AND gs.DeleteAt = 0", idCol), syncableID)
query = query.
Where(sq.Eq{
"UserGroups.DeleteAt": 0,
})
if opts.IncludeMemberCount && t == selectGroups {
query = s.getQueryBuilder().
Select(fmt.Sprintf("UserGroups.*, coalesce(Members.MemberCount, 0) AS MemberCount, Group%ss.SchemeAdmin AS SyncableSchemeAdmin", st)).
From("UserGroups").
query = query.
Column("coalesce(Members.MemberCount, 0) AS MemberCount").
LeftJoin("(SELECT GroupMembers.GroupId, COUNT(*) AS MemberCount FROM GroupMembers LEFT JOIN Users ON Users.Id = GroupMembers.UserId WHERE GroupMembers.DeleteAt = 0 AND Users.DeleteAt = 0 GROUP BY GroupId) AS Members ON Members.GroupId = UserGroups.Id").
LeftJoin(fmt.Sprintf("%[1]s ON %[1]s.GroupId = UserGroups.Id", table)).
Where(fmt.Sprintf("UserGroups.DeleteAt = 0 AND %[1]s.DeleteAt = 0 AND %[1]s.%[2]s = ?", table, idCol), syncableID).
OrderBy("UserGroups.DisplayName")
}