fix(chat): 聊天消息预览查询条件缺失

This commit is contained in:
xingc
2025-05-16 17:13:31 +08:00
parent 00ef8d8971
commit e47e9175d9
3 changed files with 7 additions and 15 deletions

View File

@@ -23,11 +23,7 @@ class Paginated(BaseModel, Generic[T]):
total: int = 0 total: int = 0
page: int = 1 page: int = 1
page_size: int = 15 page_size: int = 15
next_page: bool = None
class PaginatedCursor(Paginated):
cursor: int = None
next_page: bool = None,
class SupportPlatformType(enum.Enum): class SupportPlatformType(enum.Enum):

View File

@@ -34,7 +34,7 @@ chat_router = APIRouter(prefix='/chat', tags=['聊天模块'])
@chat_router.get( @chat_router.get(
'/all/', summary='获取所有聊天', '/all/', summary='获取所有聊天',
response_model=base_schema.BaseResponse[ response_model=base_schema.BaseResponse[
base_schema.PaginatedCursor[ base_schema.Paginated[
List[schema.ChatUnreadOut] List[schema.ChatUnreadOut]
] ]
] ]
@@ -83,7 +83,7 @@ async def get_all_chats(
@chat_router.get( @chat_router.get(
'/{chat_guid}/messages/', summary='获取单个聊天的历史消息', '/{chat_guid}/messages/', summary='获取单个聊天的历史消息',
response_model=base_schema.BaseResponse[ response_model=base_schema.BaseResponse[
base_schema.PaginatedCursor[ base_schema.Paginated[
List[schema.MessageOut] List[schema.MessageOut]
] ]
] ]
@@ -135,7 +135,6 @@ async def get_single_chat_messages(
return { return {
'data': { 'data': {
'list': results, 'list': results,
'cursor': results[-1].get('id'),
'next_page': (page * page_size) < total, 'next_page': (page * page_size) < total,
'total': total, 'total': total,
'page': page, 'page': page,

View File

@@ -73,6 +73,7 @@ async def get_chat_messages_preview(db_session: AsyncSession, chats):
Message.chat_id, Message.chat_id,
func.max(Message.created_at).label("max_created") func.max(Message.created_at).label("max_created")
) )
.where(Message.chat_id.in_(chats))
.group_by(Message.chat_id) .group_by(Message.chat_id)
.subquery() .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} 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( unread_messages_count = await get_chat_unread_messages_count(
db_session, login_user, messages_info_per_chat db_session, login_user, messages_info_per_chat
) )
@@ -105,12 +106,8 @@ async def get_unread_messages_per_chat(
'message_count': messages_info[1], 'message_count': messages_info[1],
} }
# 已读消息预览 # 消息预览
no_unread_message_chats = [ messages_info = await get_chat_messages_preview(db_session, messages_info_per_chat)
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)
for message_info in messages_info: for message_info in messages_info:
messages_info_per_chat[message_info.chat_id].update({ messages_info_per_chat[message_info.chat_id].update({
'message': message_info 'message': message_info