From d3ca87418ca53a23eca9f44b28ebc08c38621717 Mon Sep 17 00:00:00 2001 From: Bai Date: Mon, 15 Jun 2026 14:46:20 +0800 Subject: [PATCH] fix: sys-site-msg support revoke --- apps/notifications/api/site_msgs.py | 14 +++++++++++++- apps/notifications/models/site_msg.py | 7 +++++++ apps/notifications/site_msg.py | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/notifications/api/site_msgs.py b/apps/notifications/api/site_msgs.py index 48f9068fc..3f5b45257 100644 --- a/apps/notifications/api/site_msgs.py +++ b/apps/notifications/api/site_msgs.py @@ -1,6 +1,7 @@ from rest_framework.decorators import action from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from rest_framework.response import Response +from django.shortcuts import get_object_or_404 from common.api import JMSGenericViewSet from common.const.http import GET, PATCH, POST @@ -11,6 +12,8 @@ from ..serializers import ( SiteMessageSendSerializer, ) from ..site_msg import SiteMessageUtil +from ..models import MessageContent + __all__ = ('SiteMessageViewSet',) @@ -59,5 +62,14 @@ class SiteMessageViewSet(ListModelMixin, RetrieveModelMixin, JMSGenericViewSet): def send(self, request, **kwargs): s = self.get_serializer(data=request.data) s.is_valid(raise_exception=True) - SiteMessageUtil.send_msg(**s.validated_data, sender=request.user) + site_msg = SiteMessageUtil.send_msg(**s.validated_data, sender=request.user) + if site_msg: + return Response({'detail': 'ok', 'site_msg_id': str(site_msg.id)}) + else: + return Response({'detail': 'error'}) + + @action(methods=[PATCH], detail=True, permission_classes=[OnlySuperUser,]) + def revoke(self, request, **kwargs): + msg = get_object_or_404(MessageContent, id=kwargs['pk']) + msg.revoke_msg() return Response({'detail': 'ok'}) diff --git a/apps/notifications/models/site_msg.py b/apps/notifications/models/site_msg.py index 5de243339..04e56fd6e 100644 --- a/apps/notifications/models/site_msg.py +++ b/apps/notifications/models/site_msg.py @@ -52,8 +52,15 @@ class MessageContent(JMSBaseModel): return { 'id': str(self.id), 'subject': self.subject, + 'is_broadcast': self.is_broadcast, 'message': self.message, 'display_mode': self.display_mode, 'date_created': str(self.date_created), 'sender': str(self.sender) if self.sender else '' } + + def revoke_msg(self): + if not self.is_broadcast: + return + self.is_broadcast = False + self.save() diff --git a/apps/notifications/site_msg.py b/apps/notifications/site_msg.py index 4318b24cc..ae7da92ff 100644 --- a/apps/notifications/site_msg.py +++ b/apps/notifications/site_msg.py @@ -41,6 +41,7 @@ class SiteMessageUtil: site_msg.users.add(*user_ids) # 只有调用 save 才能触发 post_save 信号 site_msg.save() + return site_msg @classmethod def get_user_all_msgs(cls, user_id):