mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-16 07:18:22 +00:00
feat: 站内信 (#6183)
* 添加站内信 * s * s * 添加接口 * fix * fix * 重构了一些 * 完成 * 完善 * s * s * s * s * s * s * 测试ok * 替换业务中发送消息的方式 * 修改 * s * 去掉 update 兼容 create * 添加 unread total 接口 * 调整json字段 Co-authored-by: xinwen <coderWen@126.com>
This commit is contained in:
2
apps/notifications/models/__init__.py
Normal file
2
apps/notifications/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .notification import *
|
||||
from .site_msg import *
|
50
apps/notifications/models/notification.py
Normal file
50
apps/notifications/models/notification.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from django.db import models
|
||||
|
||||
from common.db.models import JMSModel
|
||||
|
||||
__all__ = ('SystemMsgSubscription', 'UserMsgSubscription')
|
||||
|
||||
|
||||
class UserMsgSubscription(JMSModel):
|
||||
message_type = models.CharField(max_length=128)
|
||||
user = models.ForeignKey('users.User', related_name='user_msg_subscriptions', on_delete=models.CASCADE)
|
||||
receive_backends = models.JSONField(default=list)
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.message_type}'
|
||||
|
||||
|
||||
class SystemMsgSubscription(JMSModel):
|
||||
message_type = models.CharField(max_length=128, unique=True)
|
||||
users = models.ManyToManyField('users.User', related_name='system_msg_subscriptions')
|
||||
groups = models.ManyToManyField('users.UserGroup', related_name='system_msg_subscriptions')
|
||||
receive_backends = models.JSONField(default=list)
|
||||
|
||||
message_type_label = ''
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.message_type}'
|
||||
|
||||
def __repr__(self):
|
||||
return self.__str__()
|
||||
|
||||
@property
|
||||
def receivers(self):
|
||||
from notifications.backends import BACKEND
|
||||
|
||||
users = [user for user in self.users.all()]
|
||||
|
||||
for group in self.groups.all():
|
||||
for user in group.users.all():
|
||||
users.append(user)
|
||||
|
||||
receive_backends = self.receive_backends
|
||||
receviers = []
|
||||
|
||||
for user in users:
|
||||
recevier = {'name': str(user), 'id': user.id}
|
||||
for backend in receive_backends:
|
||||
recevier[backend] = bool(BACKEND(backend).get_account(user))
|
||||
receviers.append(recevier)
|
||||
|
||||
return receviers
|
29
apps/notifications/models/site_msg.py
Normal file
29
apps/notifications/models/site_msg.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from django.db import models
|
||||
|
||||
from common.db.models import JMSModel
|
||||
|
||||
__all__ = ('SiteMessageUsers', 'SiteMessage')
|
||||
|
||||
|
||||
class SiteMessageUsers(JMSModel):
|
||||
sitemessage = models.ForeignKey('notifications.SiteMessage', on_delete=models.CASCADE, db_constraint=False, related_name='m2m_sitemessageusers')
|
||||
user = models.ForeignKey('users.User', on_delete=models.CASCADE, db_constraint=False, related_name='m2m_sitemessageusers')
|
||||
has_read = models.BooleanField(default=False)
|
||||
read_at = models.DateTimeField(default=None, null=True)
|
||||
|
||||
|
||||
class SiteMessage(JMSModel):
|
||||
subject = models.CharField(max_length=1024)
|
||||
message = models.TextField()
|
||||
users = models.ManyToManyField(
|
||||
'users.User', through=SiteMessageUsers, related_name='recv_site_messages'
|
||||
)
|
||||
groups = models.ManyToManyField('users.UserGroup')
|
||||
is_broadcast = models.BooleanField(default=False)
|
||||
sender = models.ForeignKey(
|
||||
'users.User', db_constraint=False, on_delete=models.DO_NOTHING, null=True, default=None,
|
||||
related_name='send_site_message'
|
||||
)
|
||||
|
||||
has_read = False
|
||||
read_at = None
|
Reference in New Issue
Block a user