22
33from django_rq import get_scheduler
44
5+ from django .utils import timezone
56from apps .nest .models .reminder_schedule import ReminderSchedule
67
78
@@ -22,30 +23,44 @@ def schedule(self):
2223 message = self .reminder_schedule .reminder .message ,
2324 channel_id = self .reminder_schedule .reminder .channel_id ,
2425 ).get_id ()
25- self .reminder_schedule .save ()
26- return
27-
28- self .reminder_schedule .job_id = self .scheduler .cron (
29- self .reminder_schedule .cron_expression ,
30- func = self .__class__ .send_message ,
31- args = (
32- self .reminder_schedule .reminder .message ,
33- self .reminder_schedule .reminder .channel_id ,
34- ),
35- queue_name = "default" ,
36- use_local_timezone = True ,
37- result_ttl = 500 ,
38- ).get_id ()
39- self .reminder_schedule .save ()
26+
27+ # Schedule deletion of the reminder after sending the message
28+ self .scheduler .enqueue_at (
29+ self .reminder_schedule .scheduled_time + timezone .timedelta (minutes = 1 ),
30+ self .reminder_schedule .reminder .delete ,
31+ )
32+ else :
33+ self .reminder_schedule .job_id = self .scheduler .cron (
34+ self .reminder_schedule .cron_expression ,
35+ func = self .__class__ .send_message_and_update ,
36+ args = (
37+ self .reminder_schedule .reminder .message ,
38+ self .reminder_schedule .reminder .channel_id ,
39+ self .reminder_schedule ,
40+ ),
41+ queue_name = "default" ,
42+ use_local_timezone = True ,
43+ result_ttl = 500 ,
44+ ).get_id ()
45+
46+ self .reminder_schedule .save (update_fields = ["job_id" ])
4047
4148 def cancel (self ):
4249 """Cancel the scheduled reminder."""
4350 if self .reminder_schedule .job_id :
4451 self .scheduler .cancel (self .reminder_schedule .job_id )
45- self .reminder_schedule .delete ()
52+ self .reminder_schedule .reminder . delete ()
4653
4754 @staticmethod
4855 def send_message (message : str , channel_id : str ):
4956 """Send message to the specified channel. To be implemented by subclasses."""
5057 error_message = "Subclasses must implement this method."
5158 raise NotImplementedError (error_message )
59+
60+ @staticmethod
61+ def send_message_and_update (
62+ message : str , channel_id : str , reminder_schedule : ReminderSchedule
63+ ):
64+ """Send message and update the reminder schedule."""
65+ error_message = "Subclasses must implement this method."
66+ raise NotImplementedError (error_message )
0 commit comments