diff --git a/services/web/server/src/simcore_service_webserver/conversations/_conversation_message_service.py b/services/web/server/src/simcore_service_webserver/conversations/_conversation_message_service.py index 66576e9416b..caeec8b030c 100644 --- a/services/web/server/src/simcore_service_webserver/conversations/_conversation_message_service.py +++ b/services/web/server/src/simcore_service_webserver/conversations/_conversation_message_service.py @@ -111,6 +111,7 @@ async def update_message( async def delete_message( app: web.Application, *, + user_id: UserID, project_id: ProjectID, conversation_id: ConversationID, message_id: ConversationMessageID, @@ -121,9 +122,12 @@ async def delete_message( message_id=message_id, ) + _user_group_id = await get_user_primary_group_id(app, user_id=user_id) + await notify_conversation_message_deleted( app, recipients=await _get_recipients(app, project_id), + user_group_id=_user_group_id, project_id=project_id, conversation_id=conversation_id, message_id=message_id, diff --git a/services/web/server/src/simcore_service_webserver/conversations/_socketio.py b/services/web/server/src/simcore_service_webserver/conversations/_socketio.py index bd919c19fc0..03761ca4961 100644 --- a/services/web/server/src/simcore_service_webserver/conversations/_socketio.py +++ b/services/web/server/src/simcore_service_webserver/conversations/_socketio.py @@ -6,7 +6,9 @@ ConversationID, ConversationMessageGetDB, ConversationMessageID, + ConversationMessageType, ) +from models_library.groups import GroupID from models_library.projects import ProjectID from models_library.socketio import SocketMessageDict from models_library.users import UserID @@ -14,7 +16,7 @@ from pydantic.alias_generators import to_camel from servicelib.utils import limited_as_completed -from ..socketio.messages import send_message_to_standard_group +from ..socketio.messages import send_message_to_user _MAX_CONCURRENT_SENDS: Final[int] = 3 @@ -32,6 +34,8 @@ class BaseConversationMessage(BaseModel): conversation_id: ConversationID message_id: ConversationMessageID + user_group_id: GroupID + type: ConversationMessageType model_config = ConfigDict( populate_by_name=True, @@ -42,13 +46,9 @@ class BaseConversationMessage(BaseModel): ) -class ConversationMessageCreated(BaseConversationMessage): +class ConversationMessageCreatedOrUpdated(BaseConversationMessage): content: str created: datetime.datetime - - -class ConversationMessageUpdated(BaseConversationMessage): - content: str modified: datetime.datetime @@ -62,7 +62,9 @@ async def _send_message_to_recipients( ): async for _ in limited_as_completed( ( - send_message_to_standard_group(app, recipient, notification_message) + send_message_to_user( + app, recipient, notification_message, ignore_queue=True + ) for recipient in recipients ), limit=_MAX_CONCURRENT_SENDS, @@ -81,7 +83,7 @@ async def notify_conversation_message_created( event_type=SOCKET_IO_CONVERSATION_MESSAGE_CREATED_EVENT, data={ "projectId": project_id, - **ConversationMessageCreated( + **ConversationMessageCreatedOrUpdated( **conversation_message.model_dump() ).model_dump(mode="json", by_alias=True), }, @@ -102,7 +104,7 @@ async def notify_conversation_message_updated( event_type=SOCKET_IO_CONVERSATION_MESSAGE_UPDATED_EVENT, data={ "projectId": project_id, - **ConversationMessageUpdated( + **ConversationMessageCreatedOrUpdated( **conversation_message.model_dump() ).model_dump(mode="json", by_alias=True), }, @@ -115,6 +117,7 @@ async def notify_conversation_message_deleted( app: web.Application, *, recipients: set[UserID], + user_group_id: GroupID, project_id: ProjectID, conversation_id: ConversationID, message_id: ConversationMessageID, @@ -125,7 +128,10 @@ async def notify_conversation_message_deleted( data={ "projectId": project_id, **ConversationMessageDeleted( - conversation_id=conversation_id, message_id=message_id + conversation_id=conversation_id, + message_id=message_id, + user_group_id=user_group_id, + type=ConversationMessageType.MESSAGE, ).model_dump(mode="json", by_alias=True), }, ) diff --git a/services/web/server/src/simcore_service_webserver/projects/_conversations_service.py b/services/web/server/src/simcore_service_webserver/projects/_conversations_service.py index a28cec56ad9..b415f694bcf 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_conversations_service.py +++ b/services/web/server/src/simcore_service_webserver/projects/_conversations_service.py @@ -247,6 +247,7 @@ async def delete_project_conversation_message( ) await conversations_service.delete_message( app, + user_id=user_id, project_id=project_uuid, conversation_id=conversation_id, message_id=message_id,