feat(chat): 新增聊天消息标记已读接口
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user