open-webui/backend/open_webui/models
Classic298 732d9b484d
fix: resolve N+1 query pattern in users endpoint (#20427)
## Summary

Fixed N+1 query pattern in the `/api/v1/users` endpoint where groups were being fetched for each user individually.

### Problem

The `GET /api/v1/users` endpoint called `Groups.get_groups_by_member_id()` for each user, resulting in:
- 1 query for users
- N queries for groups (one per user)

### Solution

Added a new `Groups.get_groups_by_member_ids()` method that fetches groups for multiple users in a single query using SQL `IN` clause and `JOIN`.

### Changes

- **[groups.py](open_webui/models/groups.py)**: Added `get_groups_by_member_ids()` method
- **[users.py](open_webui/routers/users.py)**: Updated endpoint to use bulk method

### Result

- Before: 1 + N queries
- After: 2 queries total (1 for users, 1 for all groups)
2026-01-06 21:26:14 +04:00
..
auths.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
channels.py refac 2026-01-01 02:23:42 +04:00
chats.py refac 2026-01-06 02:19:57 +04:00
feedbacks.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
files.py refac 2026-01-05 18:55:44 +04:00
folders.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
functions.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
groups.py fix: resolve N+1 query pattern in users endpoint (#20427) 2026-01-06 21:26:14 +04:00
knowledge.py fix: resolve undefined knowledge base name in file reference tooltip (#20333) 2026-01-03 18:13:19 +04:00
memories.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
messages.py feat: builtin native tools 2026-01-05 17:45:39 +04:00
models.py feat: Models Atomic PR of #20243 (#20369) 2026-01-05 23:37:41 +04:00
notes.py refac 2026-01-05 17:50:40 +04:00
oauth_sessions.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
prompts.py feat: Prompts Atomic PR of #20243 (#20368) 2026-01-05 04:36:13 +04:00
tags.py refac/enh: db session sharing 2025-12-28 22:00:44 +04:00
tools.py feat: Tools Atomic PR of #20243 (#20370) 2026-01-06 03:00:48 +04:00
users.py fix: prevent update_user_settings_by_id crash when user is None (#20278) 2025-12-31 02:30:31 -05:00