diff --git a/src/notifications/email_utils.py b/src/notifications/email_utils.py index f934070..072e11e 100644 --- a/src/notifications/email_utils.py +++ b/src/notifications/email_utils.py @@ -188,11 +188,20 @@ def process_deadline_reminders(ticket=None): if t.created_by and t.created_by not in assignees: assignees.append(t.created_by) + # Batch-fetch existing reminder logs for this ticket's assignees + existing_logs = set() + if assignees: + logs_qs = DeadlineReminderLog.objects.filter( + ticket=t, + user__in=assignees, + days_before__in=REMINDER_DAYS, + ).values_list("user_id", "days_before") + existing_logs = {(uid, db) for uid, db in logs_qs} + for user in assignees: if not user.email: continue - # Respect user email preference if ( hasattr(user, "receive_deadline_emails") and not user.receive_deadline_emails @@ -203,13 +212,7 @@ def process_deadline_reminders(ticket=None): for days_before in REMINDER_DAYS: if days_until_due == days_before: - already_sent = DeadlineReminderLog.objects.filter( - ticket=t, - user=user, - days_before=days_before, - ).exists() - - if already_sent: + if (user.id, days_before) in existing_logs: continue send_deadline_reminder_email(user, t, days_before) diff --git a/src/notifications/views.py b/src/notifications/views.py index 2fa6948..24430dd 100644 --- a/src/notifications/views.py +++ b/src/notifications/views.py @@ -1,5 +1,3 @@ -import json - from django.utils import timezone from rest_framework import generics, permissions, status from rest_framework.decorators import api_view, permission_classes @@ -71,12 +69,7 @@ def subscribe_push_view(request): @api_view(["POST"]) @permission_classes([permissions.IsAuthenticated]) def unsubscribe_push_view(request): - try: - data = json.loads(request.body) - except json.JSONDecodeError: - return Response({"error": "Invalid JSON"}, status=status.HTTP_400_BAD_REQUEST) - - endpoint = data.get("endpoint") + endpoint = request.data.get("endpoint") if not endpoint: return Response( {"error": "endpoint required"}, status=status.HTTP_400_BAD_REQUEST