fix(chat): 聊天消息预览查询条件缺失
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user