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 { func (s *SqlGroupStore) groupsBySyncableBaseQuery(st model.GroupSyncableType, t selectType, syncableID string, opts model.GroupSearchOpts) sq.SelectBuilder {
selectStrs := map[selectType]string{ var query sq.SelectBuilder
selectGroups: "UserGroups.*, gs.SchemeAdmin AS SyncableSchemeAdmin", switch t {
selectCountGroups: "COUNT(*)", 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 { if st == model.GroupSyncableTypeTeam {
table = "GroupTeams" query = query.
idCol = "TeamId" Join("GroupTeams gs ON gs.GroupId = UserGroups.Id").
Where(sq.Eq{
"gs.TeamId": syncableID,
"gs.DeleteAt": 0,
})
} else { } else {
table = "GroupChannels" query = query.
idCol = "ChannelId" Join("GroupChannels gs ON gs.GroupId = UserGroups.Id").
Where(sq.Eq{
"gs.ChannelId": syncableID,
"gs.DeleteAt": 0,
})
} }
query := s.getQueryBuilder(). query = query.
Select(selectStrs[t]). Where(sq.Eq{
From(fmt.Sprintf("%s gs", table)). "UserGroups.DeleteAt": 0,
LeftJoin("UserGroups ON gs.GroupId = UserGroups.Id"). })
Where(fmt.Sprintf("UserGroups.DeleteAt = 0 AND gs.%s = ? AND gs.DeleteAt = 0", idCol), syncableID)
if opts.IncludeMemberCount && t == selectGroups { if opts.IncludeMemberCount && t == selectGroups {
query = s.getQueryBuilder(). query = query.
Select(fmt.Sprintf("UserGroups.*, coalesce(Members.MemberCount, 0) AS MemberCount, Group%ss.SchemeAdmin AS SyncableSchemeAdmin", st)). Column("coalesce(Members.MemberCount, 0) AS MemberCount").
From("UserGroups").
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("(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") OrderBy("UserGroups.DisplayName")
} }