33
44from aiohttp import web
55from models_library .conversations import (
6+ ConversationGetDB ,
67 ConversationID ,
78 ConversationMessageGetDB ,
89 ConversationMessageID ,
910 ConversationMessageType ,
11+ ConversationType ,
1012)
1113from models_library .groups import GroupID
14+ from models_library .products import ProductName
1215from models_library .projects import ProjectID
1316from models_library .socketio import SocketMessageDict
1417from models_library .users import UserID
2023
2124_MAX_CONCURRENT_SENDS : Final [int ] = 3
2225
26+ SOCKET_IO_CONVERSATION_CREATED_EVENT : Final [str ] = "conversation:created"
27+ SOCKET_IO_CONVERSATION_DELETED_EVENT : Final [str ] = "conversation:deleted"
28+ SOCKET_IO_CONVERSATION_UPDATED_EVENT : Final [str ] = "conversation:updated"
29+
2330SOCKET_IO_CONVERSATION_MESSAGE_CREATED_EVENT : Final [str ] = (
2431 "conversation:message:created"
2532)
3138)
3239
3340
34- class BaseConversationMessage (BaseModel ):
41+ class BaseEvent (BaseModel ):
42+ model_config = ConfigDict (
43+ populate_by_name = True ,
44+ from_attributes = True ,
45+ alias_generator = AliasGenerator (
46+ serialization_alias = to_camel ,
47+ ),
48+ )
49+
50+
51+ class BaseConversationEvent (BaseEvent ):
52+ product_name : ProductName
53+ project_id : ProjectID | None
54+ user_group_id : GroupID
55+ conversation_id : ConversationID
56+ type : ConversationType
57+
58+
59+ class ConversationCreatedOrUpdatedEvent (BaseConversationEvent ):
60+ created : datetime .datetime
61+ modified : datetime .datetime
62+
63+
64+ class BaseConversationMessageEvent (BaseEvent ):
3565 conversation_id : ConversationID
3666 message_id : ConversationMessageID
3767 user_group_id : GroupID
@@ -46,13 +76,13 @@ class BaseConversationMessage(BaseModel):
4676 )
4777
4878
49- class ConversationMessageCreatedOrUpdated ( BaseConversationMessage ):
79+ class ConversationMessageCreatedOrUpdatedEvent ( BaseConversationMessageEvent ):
5080 content : str
5181 created : datetime .datetime
5282 modified : datetime .datetime
5383
5484
55- class ConversationMessageDeleted ( BaseConversationMessage ): ...
85+ class ConversationMessageDeletedEvent ( BaseConversationMessageEvent ): ...
5686
5787
5888async def _send_message_to_recipients (
@@ -72,6 +102,26 @@ async def _send_message_to_recipients(
72102 ...
73103
74104
105+ async def notify_conversation_created (
106+ app : web .Application ,
107+ * ,
108+ recipients : set [UserID ],
109+ project_id : ProjectID ,
110+ conversation : ConversationGetDB ,
111+ ) -> None :
112+ notification_message = SocketMessageDict (
113+ event_type = SOCKET_IO_CONVERSATION_CREATED_EVENT ,
114+ data = {
115+ "projectId" : project_id ,
116+ ** ConversationCreatedOrUpdatedEvent (** conversation .model_dump ()).model_dump (
117+ mode = "json" , by_alias = True
118+ ),
119+ },
120+ )
121+
122+ await _send_message_to_recipients (app , recipients , notification_message )
123+
124+
75125async def notify_conversation_message_created (
76126 app : web .Application ,
77127 * ,
@@ -83,7 +133,7 @@ async def notify_conversation_message_created(
83133 event_type = SOCKET_IO_CONVERSATION_MESSAGE_CREATED_EVENT ,
84134 data = {
85135 "projectId" : project_id ,
86- ** ConversationMessageCreatedOrUpdated (
136+ ** ConversationMessageCreatedOrUpdatedEvent (
87137 ** conversation_message .model_dump ()
88138 ).model_dump (mode = "json" , by_alias = True ),
89139 },
@@ -104,7 +154,7 @@ async def notify_conversation_message_updated(
104154 event_type = SOCKET_IO_CONVERSATION_MESSAGE_UPDATED_EVENT ,
105155 data = {
106156 "projectId" : project_id ,
107- ** ConversationMessageCreatedOrUpdated (
157+ ** ConversationMessageCreatedOrUpdatedEvent (
108158 ** conversation_message .model_dump ()
109159 ).model_dump (mode = "json" , by_alias = True ),
110160 },
@@ -127,7 +177,7 @@ async def notify_conversation_message_deleted(
127177 event_type = SOCKET_IO_CONVERSATION_MESSAGE_DELETED_EVENT ,
128178 data = {
129179 "projectId" : project_id ,
130- ** ConversationMessageDeleted (
180+ ** ConversationMessageDeletedEvent (
131181 conversation_id = conversation_id ,
132182 message_id = message_id ,
133183 user_group_id = user_group_id ,
0 commit comments