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

@@ -270,6 +270,42 @@ async def delete_single_chat(
return {'message': '聊天已删除'} 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') @chat_router.websocket('/ws')
async def get_chat_websocket( async def get_chat_websocket(
websocket: WebSocket, websocket: WebSocket,

View File

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