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