notifications/apps/push_notifications/models.py
Sayyid Hamid Mahdavi 40d3579d13 send message api
2025-07-15 13:59:42 +03:30

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)