From c31db262902732a8f690efefae96ca845cfadece Mon Sep 17 00:00:00 2001 From: Bai Date: Tue, 21 Apr 2026 14:35:07 +0800 Subject: [PATCH] feat: support via site-msg websocket send popup msg --- apps/notifications/models/site_msg.py | 8 ++++++++ apps/notifications/site_msg.py | 3 +-- apps/notifications/ws.py | 8 +++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/notifications/models/site_msg.py b/apps/notifications/models/site_msg.py index 9c78615b1..5de243339 100644 --- a/apps/notifications/models/site_msg.py +++ b/apps/notifications/models/site_msg.py @@ -14,6 +14,14 @@ class SiteMessage(JMSBaseModel): read_at = models.DateTimeField(default=None, null=True) comment = '' + def as_data(self): + return { + 'id': str(self.id), + 'content': self.content.as_data() if self.content else {}, + 'has_read': self.has_read, + 'date_created': str(self.date_created) + } + class MessageContent(JMSBaseModel): DisplayMode = SiteMessageDisplayMode diff --git a/apps/notifications/site_msg.py b/apps/notifications/site_msg.py index 8f55afb48..8a489f008 100644 --- a/apps/notifications/site_msg.py +++ b/apps/notifications/site_msg.py @@ -68,8 +68,7 @@ class SiteMessageUtil: def get_user_display_msgs(cls, user_id): msgs = SiteMessage.objects.filter(user_id=user_id, has_read=False).exclude( content__display_mode=SiteMessageModel.DisplayMode.default - ).values_list('content', flat=True).distinct() - msgs = SiteMessageModel.objects.filter(id__in=msgs) + ).prefetch_related('content') return msgs @classmethod diff --git a/apps/notifications/ws.py b/apps/notifications/ws.py index 209be1c6a..dbe0db85b 100644 --- a/apps/notifications/ws.py +++ b/apps/notifications/ws.py @@ -6,7 +6,7 @@ from common.db.utils import safe_db_connection from common.utils import get_logger from .signal_handlers import new_site_msg_chan from .site_msg import SiteMessageUtil -from .models.site_msg import MessageContent +from .models.site_msg import SiteMessage logger = get_logger(__name__) @@ -48,8 +48,10 @@ class SiteMsgWebsocket(JsonWebsocketConsumer): def send_site_msg_for_display(self, user_id): msgs = SiteMessageUtil.get_user_display_msgs(user_id) for msg in msgs: - msg: MessageContent - logger.debug('Send need display site msg to user: {} {} {}'.format(user_id, msg.id, msg.display_mode)) + msg: SiteMessage + logger.debug('Send need display site msg to user: {} {} {}'.format( + user_id, msg.id, msg.content.display_mode + )) msg_data = msg.as_data() self.send_json({'type': 'display', 'site_msg': msg_data})