fix: resolve N+1 query in SCIM group_to_scim user lookup (#21005)
This commit is contained in:
@@ -352,18 +352,17 @@ def user_to_scim(user: UserModel, request: Request, db=None) -> SCIMUser:
|
|||||||
def group_to_scim(group: GroupModel, request: Request, db=None) -> SCIMGroup:
|
def group_to_scim(group: GroupModel, request: Request, db=None) -> SCIMGroup:
|
||||||
"""Convert internal Group model to SCIM Group"""
|
"""Convert internal Group model to SCIM Group"""
|
||||||
member_ids = Groups.get_group_user_ids_by_id(group.id, db) or []
|
member_ids = Groups.get_group_user_ids_by_id(group.id, db) or []
|
||||||
members = []
|
|
||||||
|
|
||||||
for user_id in member_ids:
|
# Batch-fetch all users to avoid N+1 queries
|
||||||
user = Users.get_user_by_id(user_id, db=db)
|
users = Users.get_users_by_user_ids(member_ids, db=db) if member_ids else []
|
||||||
if user:
|
members = [
|
||||||
members.append(
|
SCIMGroupMember(
|
||||||
SCIMGroupMember(
|
value=user.id,
|
||||||
value=user.id,
|
ref=f"{request.base_url}api/v1/scim/v2/Users/{user.id}",
|
||||||
ref=f"{request.base_url}api/v1/scim/v2/Users/{user.id}",
|
display=user.name,
|
||||||
display=user.name,
|
)
|
||||||
)
|
for user in users
|
||||||
)
|
]
|
||||||
|
|
||||||
return SCIMGroup(
|
return SCIMGroup(
|
||||||
id=group.id,
|
id=group.id,
|
||||||
|
|||||||
Reference in New Issue
Block a user