@@ -0,0 +1,43 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from celery import shared_task
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.profiles.models import SearchProfile
|
||||
|
||||
from .models import DigestOutbox, ReminderOutbox
|
||||
from .services import (
|
||||
create_daily_outbox,
|
||||
create_due_reminders,
|
||||
send_digest,
|
||||
send_reminder,
|
||||
)
|
||||
|
||||
|
||||
@shared_task(name="apps.notifications.tasks.build_due_digests")
|
||||
def build_due_digests() -> dict[str, int]:
|
||||
created = sent = 0
|
||||
for profile in SearchProfile.objects.filter(is_active=True).select_related("user"):
|
||||
outbox = create_daily_outbox(profile)
|
||||
if outbox is None:
|
||||
continue
|
||||
created += 1
|
||||
if outbox.status == DigestOutbox.Status.PENDING:
|
||||
send_digest(outbox)
|
||||
sent += 1
|
||||
return {"processed": created, "sent": sent}
|
||||
|
||||
|
||||
@shared_task(name="apps.notifications.tasks.build_due_reminders")
|
||||
def build_due_reminders() -> dict[str, int]:
|
||||
now = timezone.now()
|
||||
created = sent = 0
|
||||
for profile in SearchProfile.objects.filter(is_active=True).select_related("user"):
|
||||
outboxes = create_due_reminders(profile, now=now)
|
||||
created += len(outboxes)
|
||||
for outbox in ReminderOutbox.objects.filter(
|
||||
status=ReminderOutbox.Status.PENDING, scheduled_for__lte=now
|
||||
).select_related("profile"):
|
||||
send_reminder(outbox)
|
||||
sent += 1
|
||||
return {"created": created, "sent": sent}
|
||||
Reference in New Issue
Block a user