From f91f279a5a98f4af800a3333e3ac3952aa7a34a1 Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Sat, 6 Sep 2025 17:44:07 +0330 Subject: [PATCH] celery beat --- apps/emails/models.py | 2 +- apps/emails/tasks.py | 4 +++- apps/emails/views.py | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/emails/models.py b/apps/emails/models.py index e9d5f12..b0ffe70 100644 --- a/apps/emails/models.py +++ b/apps/emails/models.py @@ -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() diff --git a/apps/emails/tasks.py b/apps/emails/tasks.py index a6f2faf..ee6ac43 100644 --- a/apps/emails/tasks.py +++ b/apps/emails/tasks.py @@ -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( diff --git a/apps/emails/views.py b/apps/emails/views.py index f23393c..f06feb8 100644 --- a/apps/emails/views.py +++ b/apps/emails/views.py @@ -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) - instance.send() + if not instance.queue: + instance.send()