"...git@developer.sourcefind.cn:OpenDAS/mmdetection3d.git" did not exist on "f6e95edde84cf2d1e6e613b31913a2e90950f748"
Unverified Commit 3b487cfa authored by Timothy Jaeryang Baek's avatar Timothy Jaeryang Baek Committed by GitHub
Browse files

Merge pull request #4046 from thearyadev/chat-list-optimization

perf: optimize query for chat list
parents a8d2072e f531a51e
...@@ -245,6 +245,40 @@ class ChatTable: ...@@ -245,6 +245,40 @@ class ChatTable:
) )
return [ChatModel.model_validate(chat) for chat in all_chats] return [ChatModel.model_validate(chat) for chat in all_chats]
def get_chat_title_id_list_by_user_id(
self,
user_id: str,
include_archived: bool = False,
skip: int = 0,
limit: int = 50,
) -> List[ChatTitleIdResponse]:
with get_db() as db:
query = db.query(Chat).filter_by(user_id=user_id)
if not include_archived:
query = query.filter_by(archived=False)
all_chats = (
query.order_by(Chat.updated_at.desc())
# limit cols
.with_entities(
Chat.id, Chat.title, Chat.updated_at, Chat.created_at
).all()
)
# result has to be destrctured from sqlalchemy `row` and mapped to a dict since the `ChatModel`is not the returned dataclass.
return list(
map(
lambda row: ChatTitleIdResponse.model_validate(
{
"id": row[0],
"title": row[1],
"updated_at": row[2],
"created_at": row[3],
}
),
all_chats,
)
)
def get_chat_list_by_chat_ids( def get_chat_list_by_chat_ids(
self, chat_ids: List[str], skip: int = 0, limit: int = 50 self, chat_ids: List[str], skip: int = 0, limit: int = 50
) -> List[ChatModel]: ) -> List[ChatModel]:
......
...@@ -45,7 +45,7 @@ router = APIRouter() ...@@ -45,7 +45,7 @@ router = APIRouter()
async def get_session_user_chat_list( async def get_session_user_chat_list(
user=Depends(get_verified_user), skip: int = 0, limit: int = 50 user=Depends(get_verified_user), skip: int = 0, limit: int = 50
): ):
return Chats.get_chat_list_by_user_id(user.id, skip, limit) return Chats.get_chat_title_id_list_by_user_id(user.id, skip=skip, limit=limit)
############################ ############################
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment