From e47e9175d9e69f45b949551fdcad60ec9d5334b3 Mon Sep 17 00:00:00 2001 From: xingc Date: Fri, 16 May 2025 17:13:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E8=81=8A=E5=A4=A9=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E9=A2=84=E8=A7=88=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/base/schema.py | 6 +----- core/routers/chat/routes.py | 5 ++--- core/routers/chat/services.py | 11 ++++------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/core/base/schema.py b/core/base/schema.py index 363ec06..86eda86 100644 --- a/core/base/schema.py +++ b/core/base/schema.py @@ -23,11 +23,7 @@ class Paginated(BaseModel, Generic[T]): total: int = 0 page: int = 1 page_size: int = 15 - - -class PaginatedCursor(Paginated): - cursor: int = None - next_page: bool = None, + next_page: bool = None class SupportPlatformType(enum.Enum): diff --git a/core/routers/chat/routes.py b/core/routers/chat/routes.py index a15f2a4..a67547d 100644 --- a/core/routers/chat/routes.py +++ b/core/routers/chat/routes.py @@ -34,7 +34,7 @@ chat_router = APIRouter(prefix='/chat', tags=['聊天模块']) @chat_router.get( '/all/', summary='获取所有聊天', response_model=base_schema.BaseResponse[ - base_schema.PaginatedCursor[ + base_schema.Paginated[ List[schema.ChatUnreadOut] ] ] @@ -83,7 +83,7 @@ async def get_all_chats( @chat_router.get( '/{chat_guid}/messages/', summary='获取单个聊天的历史消息', response_model=base_schema.BaseResponse[ - base_schema.PaginatedCursor[ + base_schema.Paginated[ List[schema.MessageOut] ] ] @@ -135,7 +135,6 @@ async def get_single_chat_messages( return { 'data': { 'list': results, - 'cursor': results[-1].get('id'), 'next_page': (page * page_size) < total, 'total': total, 'page': page, diff --git a/core/routers/chat/services.py b/core/routers/chat/services.py index 1d0a1c7..4061327 100644 --- a/core/routers/chat/services.py +++ b/core/routers/chat/services.py @@ -73,6 +73,7 @@ async def get_chat_messages_preview(db_session: AsyncSession, chats): Message.chat_id, func.max(Message.created_at).label("max_created") ) + .where(Message.chat_id.in_(chats)) .group_by(Message.chat_id) .subquery() ) @@ -96,7 +97,7 @@ async def get_unread_messages_per_chat( """获取聊天未读消息数和消息预览""" messages_info_per_chat: dict[int, dict] = {chat.id: {'message_count': 0} for chat in chats} - # 未读消息数和预览 + # 未读消息数 unread_messages_count = await get_chat_unread_messages_count( db_session, login_user, messages_info_per_chat ) @@ -105,12 +106,8 @@ async def get_unread_messages_per_chat( 'message_count': messages_info[1], } - # 已读消息预览 - no_unread_message_chats = [ - chat_id - for chat_id, message_info in messages_info_per_chat.items() if message_info.get('message') is None - ] - messages_info = await get_chat_messages_preview(db_session, no_unread_message_chats) + # 消息预览 + messages_info = await get_chat_messages_preview(db_session, messages_info_per_chat) for message_info in messages_info: messages_info_per_chat[message_info.chat_id].update({ 'message': message_info