from django.db import models from django.db.models import F from oauth2_provider.settings import oauth2_settings from apps.users.models import User from utils.models import BaseModel from django.utils.translation import gettext_lazy as _ class EmailQueueQuerySet(models.query.QuerySet): pass class EmailQueue(models.Model): title = models.CharField(_('title'), max_length=255) user = models.ForeignKey(User, verbose_name=_('user'), on_delete=models.CASCADE) last_sent = models.DateTimeField(_('last sent'), auto_now_add=True) objects = EmailQueueQuerySet.as_manager() class EmailQuerySet(models.QuerySet): pass class Email(BaseModel): class StateChoices(models.IntegerChoices): INIT = 0, _('init') START = 1, _('Start') DONE = 2, _('done') TIMEOUT = 3, _('timeout') FAILED = 4, _('failed') user = models.ForeignKey(User, on_delete=models.PROTECT, related_name='+') 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, null=True, blank=True) stats = models.IntegerField(default=StateChoices.INIT, choices=StateChoices.choices) queue = models.ForeignKey(EmailQueue, on_delete=models.PROTECT, related_name='+', null=True, blank=True) # bulk = models.ForeignKey("BulkEmail", null=True, blank=True, on_delete=models.PROTECT) objects = EmailQuerySet.as_manager() def __str__(self): return self.title def send(self): from apps.emails.tasks import send_email send_email.delay(self.uuid) def _send_email(self): from django.core.mail import send_mail from django.conf import settings send_mail( self.title, self.message, settings.EMAIL_HOST_USER, ["xdshia49@gmail.com"], fail_silently=False, )