48 lines
No EOL
1.8 KiB
Python
48 lines
No EOL
1.8 KiB
Python
from django.db import models
|
|
from django.contrib.auth import get_user_model
|
|
|
|
from .signals import send_message
|
|
|
|
# Create your models here.
|
|
|
|
class Notification(models.Model):
|
|
content = models.TextField()
|
|
recipient = models.ForeignKey(get_user_model(), models.CASCADE)
|
|
app = models.CharField(max_length=64, null=True, blank=True)
|
|
data = models.CharField(max_length=128, null=True, blank=True)
|
|
|
|
def send(self):
|
|
dispatchers = self.notificationdispatcher_set.all()
|
|
response = []
|
|
|
|
if dispatchers:
|
|
for dispatcher in dispatchers:
|
|
response.append(send_message.send_robust(self.__class__, dispatcher=dispatcher.dispatcher, notification=self))
|
|
else:
|
|
for dispatcher in GatewayUser.objects.filter(user=self.recipient):
|
|
response.append(send_message.send_robust(self.__class__, dispatcher=dispatcher.gateway, notification=self))
|
|
|
|
return response
|
|
|
|
class NotificationDispatcher(models.Model):
|
|
notification = models.ForeignKey(Notification, models.CASCADE)
|
|
dispatcher = models.CharField(max_length=64)
|
|
|
|
class NotificationDatetimeSchedule(models.Model):
|
|
notification = models.ForeignKey(Notification, models.CASCADE)
|
|
datetime = models.DateTimeField()
|
|
sent = models.BooleanField(default=False)
|
|
|
|
class NotificationDailySchedule(models.Model):
|
|
notification = models.ForeignKey(Notification, models.CASCADE)
|
|
time = models.TimeField()
|
|
last_sent = models.DateField(null=True, blank=True)
|
|
|
|
class GatewayUser(models.Model):
|
|
user = models.ForeignKey(get_user_model(), models.CASCADE)
|
|
gateway = models.CharField(max_length=64)
|
|
|
|
class GatewayUserSetting(models.Model):
|
|
gatewayuser = models.ForeignKey(GatewayUser, models.CASCADE)
|
|
key = models.CharField(max_length=64)
|
|
value = models.CharField(max_length=256) |