zerver: Add endpoints and events for reminders.

There are similar to what exists for scheduled messages expect
the PATCH requests which will be added later when the
functionality is implemented.
This commit is contained in:
Aman Agrawal
2025-06-28 02:38:58 +05:30
committed by Tim Abbott
parent 0b4da0ae35
commit 25731859b6
19 changed files with 475 additions and 16 deletions

View File

@@ -3,6 +3,7 @@ from django.utils.translation import gettext as _
from zerver.lib.exceptions import ResourceNotFoundError
from zerver.models import ScheduledMessage, UserProfile
from zerver.models.scheduled_jobs import (
APIReminderDirectMessageDict,
APIScheduledDirectMessageDict,
APIScheduledStreamMessageDict,
)
@@ -12,7 +13,9 @@ def access_scheduled_message(
user_profile: UserProfile, scheduled_message_id: int
) -> ScheduledMessage:
try:
return ScheduledMessage.objects.get(id=scheduled_message_id, sender=user_profile)
return ScheduledMessage.objects.get(
id=scheduled_message_id, sender=user_profile, delivery_type=ScheduledMessage.SEND_LATER
)
except ScheduledMessage.DoesNotExist:
raise ResourceNotFoundError(_("Scheduled message does not exist"))
@@ -32,3 +35,20 @@ def get_undelivered_scheduled_messages(
scheduled_message.to_dict() for scheduled_message in scheduled_messages
]
return scheduled_message_dicts
def get_undelivered_reminders(
user_profile: UserProfile,
) -> list[APIReminderDirectMessageDict]:
reminders = ScheduledMessage.objects.filter(
realm_id=user_profile.realm_id,
sender=user_profile,
# Notably, we don't require failed=False, since we will want
# to display those to users.
delivered=False,
delivery_type=ScheduledMessage.REMIND,
).order_by("scheduled_timestamp")
reminder_dicts: list[APIReminderDirectMessageDict] = [
reminder.to_reminder_dict() for reminder in reminders
]
return reminder_dicts