fix(notes): eliminate N+1 query in get_notes endpoint
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
This commit is contained in:
co-authored by
Classic298
parent
0e1edc4c01
commit
084f0ef6a5
@@ -70,21 +70,23 @@ async def get_notes(
|
|||||||
limit = 60
|
limit = 60
|
||||||
skip = (page - 1) * limit
|
skip = (page - 1) * limit
|
||||||
|
|
||||||
notes = []
|
notes = Notes.get_notes_by_user_id(user.id, "read", skip=skip, limit=limit, db=db)
|
||||||
for note in Notes.get_notes_by_user_id(
|
if not notes:
|
||||||
user.id, "read", skip=skip, limit=limit, db=db
|
return []
|
||||||
):
|
|
||||||
note_user = Users.get_user_by_id(note.user_id, db=db)
|
user_ids = list(set(note.user_id for note in notes))
|
||||||
if note_user:
|
users = {user.id: user for user in Users.get_users_by_user_ids(user_ids, db=db)}
|
||||||
notes.append(
|
|
||||||
NoteUserResponse(
|
return [
|
||||||
**{
|
NoteUserResponse(
|
||||||
**note.model_dump(),
|
**{
|
||||||
"user": UserResponse(**note_user.model_dump()),
|
**note.model_dump(),
|
||||||
}
|
"user": UserResponse(**users[note.user_id].model_dump()),
|
||||||
)
|
}
|
||||||
)
|
)
|
||||||
return notes
|
for note in notes
|
||||||
|
if note.user_id in users
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@router.get("/search", response_model=NoteListResponse)
|
@router.get("/search", response_model=NoteListResponse)
|
||||||
|
|||||||
Reference in New Issue
Block a user