Files
guilan-ace-backend/apps/communications/tasks.py
Amirhossein Khalili 3ec28638d1 feat: replace email flows with in-app notifications
Add recipient notification detail and filtering, a queued admin composer, and contextual automatic titles. Retire email delivery, obsolete auth routes, newsletter data, and related templates and settings.
2026-09-26 12:23:10 +03:30

44 lines
1.5 KiB
Python

"""Scheduled automatic in-app reminders."""
import logging
from datetime import timedelta
from celery import shared_task
from django.utils import timezone
from apps.events.models import Event, Registration
from apps.notifications.services import notify_user
logger = logging.getLogger(__name__)
@shared_task
def send_event_reminders():
reminder_target = timezone.now() + timedelta(hours=24)
window = timedelta(minutes=30)
events = Event.objects.filter(
start_time__range=(reminder_target - window, reminder_target + window),
status=Event.StatusChoices.PUBLISHED,
is_deleted=False,
)
total_sent = 0
for event in events:
registrations = Registration.objects.filter(
event=event,
status=Registration.StatusChoices.CONFIRMED,
is_deleted=False,
).select_related("user")
for registration in registrations:
notify_user(registration.user_id, {
"type": "event_reminder",
"title": f"یادآوری برگزاری «{event.title}»",
"message": "رویداد شما در ۲۴ ساعت آینده برگزار می‌شود.",
"level": "info",
"action_url": f"/events/{event.slug}",
"entity_type": "event",
"entity_id": event.id,
})
total_sent += 1
logger.info("Event reminders sent to %s users", total_sent)
return f"Event reminders sent to {total_sent} users"