feat(chat): 单向聊天可二次激活 单向聊天可二次激活,未删除方聊天消息保留,双向删除后记录清空
This commit is contained in:
@@ -10,7 +10,7 @@ from fastapi import WebSocket
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from core.db.crud import CRUD
|
||||
from core.db.models import ReadStatus, User, Chat, Message
|
||||
from core.db.models import ChatParticipant, User, Chat, Message
|
||||
|
||||
from .managers import SocketManager
|
||||
from . import schema
|
||||
@@ -29,7 +29,6 @@ async def send_new_message(
|
||||
incoming_message: schema.WSMessage,
|
||||
):
|
||||
chat_guid: str = str(incoming_message.chat_guid)
|
||||
# chat: Chat | None = await CRUD(db_session, Chat).get(filters={'guid': chat_guid, 'is_deleted': False}
|
||||
chat: Chat | None = await get_chat(chat_guid, current_user, db_session)
|
||||
|
||||
# 判断是否为新聊天
|
||||
@@ -73,16 +72,7 @@ async def send_new_message(
|
||||
content=message.content,
|
||||
friend_user=current_user.dict(),
|
||||
)
|
||||
send_status_replay = schema.WSMessageOut(
|
||||
type='chat.send_status_reply',
|
||||
message_id=message.id,
|
||||
message_guid=message.guid,
|
||||
message_type=message.message_type,
|
||||
chat_guid=chat.guid,
|
||||
)
|
||||
|
||||
await socket_manager.broadcast_to_chat(chat_guid, send_message_schema.model_dump_json())
|
||||
await websocket.send_text(send_status_replay.model_dump_json())
|
||||
|
||||
|
||||
@socket_manager.handler('chat.message_read')
|
||||
@@ -90,16 +80,23 @@ async def read_message(
|
||||
websocket: WebSocket,
|
||||
db_session: AsyncSession,
|
||||
current_user: User,
|
||||
chats: dict,
|
||||
incoming_message: schema.WSMessage,
|
||||
):
|
||||
last_read_message_id: str | None = incoming_message.content
|
||||
if not last_read_message_id:
|
||||
return
|
||||
|
||||
db_crud = CRUD(db_session, ReadStatus)
|
||||
db_crud = CRUD(db_session, ChatParticipant)
|
||||
chat_guid: str = str(incoming_message.chat_guid)
|
||||
chat: Chat | None = await get_chat(chat_guid, current_user, db_session)
|
||||
if chat is None:
|
||||
await socket_manager.send_error('聊天尚未添加', websocket)
|
||||
return
|
||||
|
||||
condition = {
|
||||
'user_id': current_user.user_id,
|
||||
'chat_guid': incoming_message.chat_guid,
|
||||
'chat_id': chat.id,
|
||||
}
|
||||
result = await db_crud.update(filters=condition, data={'last_read_message_id': last_read_message_id})
|
||||
if result is None:
|
||||
|
||||
Reference in New Issue
Block a user