From 084f0ef6a5491e186bf6b71c6386973ba18ef2fa Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 7 Jan 2026 23:32:56 +0400 Subject: [PATCH] fix(notes): eliminate N+1 query in get_notes endpoint Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com> --- backend/open_webui/routers/notes.py | 32 +++++++++++++++-------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/backend/open_webui/routers/notes.py b/backend/open_webui/routers/notes.py index f3f8b8cff..56730e2b6 100644 --- a/backend/open_webui/routers/notes.py +++ b/backend/open_webui/routers/notes.py @@ -70,21 +70,23 @@ async def get_notes( limit = 60 skip = (page - 1) * limit - notes = [] - for note in Notes.get_notes_by_user_id( - user.id, "read", skip=skip, limit=limit, db=db - ): - note_user = Users.get_user_by_id(note.user_id, db=db) - if note_user: - notes.append( - NoteUserResponse( - **{ - **note.model_dump(), - "user": UserResponse(**note_user.model_dump()), - } - ) - ) - return notes + notes = Notes.get_notes_by_user_id(user.id, "read", skip=skip, limit=limit, db=db) + if not notes: + return [] + + user_ids = list(set(note.user_id for note in notes)) + users = {user.id: user for user in Users.get_users_by_user_ids(user_ids, db=db)} + + return [ + NoteUserResponse( + **{ + **note.model_dump(), + "user": UserResponse(**users[note.user_id].model_dump()), + } + ) + for note in notes + if note.user_id in users + ] @router.get("/search", response_model=NoteListResponse)