using Hangfire; namespace BackgroundJobs.Task.Jobs; public class JobSchedulerRegistrator { private readonly IBackgroundJobClient _backgroundJobClient; private readonly SmsReminder _smsReminder; private static DateTime? _lastRunDateMorning; private static DateTime? _lastRunDateEvening; public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient) { _smsReminder = smsReminder; _backgroundJobClient = backgroundJobClient; } public void Register() { RecurringJob.AddOrUpdate( "Task.SmsReminderChecker", () => SmsReminderCheckAndSchedule(), "*/5 * * * *" // هر 5 دقیقه یکبار چک کن ); } public void SmsReminderCheckAndSchedule() { var now = DateTime.Now; var startMorning = new TimeSpan(9, 0, 0); var endMorning = new TimeSpan(9, 40, 0); var startEvening = new TimeSpan(15, 30, 0); var endEvening = new TimeSpan(15, 40, 0); // صبح if (now.DayOfWeek != DayOfWeek.Friday && now.TimeOfDay >= startMorning && now.TimeOfDay < endMorning) { if (_lastRunDateMorning?.Date != now.Date) { _backgroundJobClient.Enqueue(() => _smsReminder.Execute()); _lastRunDateMorning = now; } } // عصر - پنجشنبه و جمعه تعطیل است if (now.DayOfWeek != DayOfWeek.Friday && now.DayOfWeek != DayOfWeek.Thursday && now.TimeOfDay >= startEvening && now.TimeOfDay < endEvening) { if (_lastRunDateEvening?.Date != now.Date) { _backgroundJobClient.Enqueue(() => _smsReminder.Execute()); _lastRunDateEvening = now; } } } }