feat(chat): 新增聊天消息标记已读接口

This commit is contained in:
xingc
2025-10-16 19:46:37 +08:00
parent 133ad6bea1
commit 1d8556506e
2 changed files with 47 additions and 2 deletions

View File

@@ -69,7 +69,7 @@ async def get_all_chats(
chats = result.scalars().all()
unread_messages_chats = await get_unread_messages_per_chat(db_session, chats, login_user)
unread_messages_total = await get_total_unread_messages_count(db_session, login_user)
unread_messages_total = await get_total_unread_messages_count(db_session, login_user)
return {
'data': {
@@ -270,6 +270,42 @@ async def delete_single_chat(
return {'message': '聊天已删除'}
@chat_router.post(
'/messages/make-all-read',
summary='聊天信息标记为已读',
description='支持批量操作多个聊天', response_model=base_schema.BaseResponse
)
async def make_messages_read(
payload: schema.MakeMessageReadIn,
login_user: LoginUser = Depends(get_current_user_form_http),
db_session: AsyncSession = Depends(get_async_session),
):
db_curd = CRUD(db_session, Chat)
chat_mapping = {str(chat.chat_guid): chat.last_read_message_id for chat in payload.chats}
chats = await db_curd.get_all(filters={'guid__in': chat_mapping.keys()})
for chat in chats:
last_read_message_id = chat_mapping.get(chat.guid)
if last_read_message_id and await db_curd.exists(
model=Message,
filters={
'id': last_read_message_id,
'chat_id': chat.id,
}
):
await db_curd.update(
model=ChatParticipant,
data={'last_read_message_id': last_read_message_id},
filters={
'chat_id': chat.id,
'user_id': login_user.user_id,
'last_read_message_id__lt': last_read_message_id,
},
)
return {'message': 'ok'}
@chat_router.websocket('/ws')
async def get_chat_websocket(
websocket: WebSocket,

View File

@@ -6,7 +6,7 @@
# @Desc :
from typing import Literal, Optional, List
from pydantic import BaseModel, conint, UUID4
from pydantic import BaseModel, UUID4
from core.base.schema import MessageType, Paginated
from core.routers.user.schema import LiteUser
@@ -35,6 +35,15 @@ class ChatPaginated(Paginated):
unread_messages_total: int
class MakeMessageRead(BaseModel):
chat_guid: UUID4
last_read_message_id: int
class MakeMessageReadIn(BaseModel):
chats: List[MakeMessageRead]
class ChatUnreadOut(BaseModel):
chat_guid: UUID4
created_at: str