mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
user_groups: Add get_recursive_supergroups_union_for_groups.
This function will be useful in finding out affected groups when
sending events for users gaining or losing metadata access when the
members of a user group change in any way.
(cherry picked from commit 139679cdb1)
This commit is contained in:
committed by
Tim Abbott
parent
5d947cb501
commit
1e896d9878
@@ -790,6 +790,15 @@ def get_recursive_subgroups_union_for_groups(user_group_ids: list[int]) -> Query
|
||||
return cte.join(UserGroup, id=cte.col.group_id).with_cte(cte)
|
||||
|
||||
|
||||
def get_recursive_supergroups_union_for_groups(user_group_ids: list[int]) -> QuerySet[UserGroup]:
|
||||
cte = With.recursive(
|
||||
lambda cte: UserGroup.objects.filter(id__in=user_group_ids)
|
||||
.values(group_id=F("id"))
|
||||
.union(cte.join(UserGroup, direct_subgroups=cte.col.group_id).values(group_id=F("id")))
|
||||
)
|
||||
return cte.join(UserGroup, id=cte.col.group_id).with_cte(cte)
|
||||
|
||||
|
||||
def get_recursive_subgroups(user_group_id: int) -> QuerySet[UserGroup]:
|
||||
return get_recursive_subgroups_union_for_groups([user_group_id])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user