58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
from django.db import models
|
|
from oauth2_provider.settings import oauth2_settings
|
|
|
|
from apps.users.models import User
|
|
from utils.models import BaseModel
|
|
from utils.clients import gotify
|
|
|
|
|
|
class PushUserQuerySet(models.QuerySet):
|
|
def submit(self, user):
|
|
push_user, created = self.get_or_create(user=user)
|
|
push_user: PushUser = push_user
|
|
push_user.submit_user()
|
|
push_user.submit_client()
|
|
push_user.submit_application()
|
|
return push_user
|
|
|
|
class PushUser(BaseModel):
|
|
user = models.ForeignKey(User, on_delete=models.PROTECT)
|
|
client_token = models.CharField(max_length=32, null=True, blank=True)
|
|
application_token = models.CharField(max_length=32, null=True, blank=True)
|
|
app_id = None
|
|
|
|
|
|
objects = PushUserQuerySet.as_manager()
|
|
|
|
def submit_user(self):
|
|
response = gotify.submit_user(str(self.user.uuid))
|
|
|
|
def submit_client(self):
|
|
if not self.client_token:
|
|
response = gotify.submit_client(str(self.user.uuid))
|
|
self.client_token = response.token
|
|
self.save()
|
|
|
|
def submit_application(self):
|
|
if not self.application_token:
|
|
response = gotify.submit_application(self.client_token, str(self.user.uuid))
|
|
self.application_token = response.token
|
|
self.save()
|
|
|
|
def send_push(self):
|
|
return
|
|
|
|
|
|
class PushMessage(BaseModel):
|
|
push_user = models.ForeignKey(PushUser, on_delete=models.PROTECT)
|
|
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT,
|
|
related_name='+', null=True, blank=True)
|
|
title = models.CharField(max_length=128)
|
|
message = models.TextField()
|
|
priority = models.IntegerField(default=5)
|
|
extras = models.JSONField(default=dict)
|
|
|
|
def send_push(self):
|
|
gotify.send_notif(token=self.push_user.application_token ,title=self.title, message=self.message, priority=self.priority, extras=self.extras)
|
|
|
|
|