celery beat

This commit is contained in:
Sayyid Hamid Mahdavi 2025-09-06 17:44:07 +03:30
parent 4c7587e6e0
commit f91f279a5a
3 changed files with 6 additions and 3 deletions

View file

@ -13,7 +13,7 @@ class EmailQueueQuerySet(models.query.QuerySet):
class EmailQueue(BaseModel):
title = models.CharField(_('title'), max_length=255)
user = models.ForeignKey(User, verbose_name=_('user'), on_delete=models.CASCADE)
user = models.ForeignKey(User, verbose_name=_('user'), on_delete=models.PROTECT)
last_sent = models.DateTimeField(_('last sent'), auto_now_add=True)
objects = EmailQueueQuerySet.as_manager()

View file

@ -21,8 +21,10 @@ def send_email(email_uuid):
def send_email_for_queued_events():
logger.info('Sending email for queued events')
for email_queue in EmailQueue.objects.all():
qs = Email.objects.filter(queue=email_queue, stats=Email.StateChoices.INIT, created_at_gte=F('queue__last_sent'))
logger.info('Sending email for queue %s', email_queue.title)
qs = Email.objects.filter(queue=email_queue, stats=Email.StateChoices.INIT, created_at__gte=F('queue__last_sent'))
if email_queue.last_sent <= timezone.now() - timezone.timedelta(hours=1) and qs.exists():
logger.info('Sending email for queue %s', email_queue.title)
from django.core.mail import send_mail
from django.conf import settings
send_mail(

View file

@ -43,4 +43,5 @@ class ApplicationEmailViewSet(
user = get_object_or_404(User, uuid=user_uuid)
application = get_application(self.request)
instance = serializer.save(user=user, application=application)
if not instance.queue:
instance.send()