class EventReminderSchedulerJob < ApplicationJob queue_as :default def perform schedule_weekly_reminders schedule_daily_reminders schedule_day_of_reminders end private def schedule_weekly_reminders # Find events starting in exactly 7 days target_date = 7.days.from_now.beginning_of_day events = Event.published .where(start_time: target_date..(target_date + 1.day)) events.find_each do |event| EventReminderJob.perform_later(event.id, 7) end end def schedule_daily_reminders # Find events starting in exactly 1 day (tomorrow) target_date = 1.day.from_now.beginning_of_day events = Event.published .where(start_time: target_date..(target_date + 1.day)) events.find_each do |event| EventReminderJob.perform_later(event.id, 1) end end def schedule_day_of_reminders # Find events starting today target_date = Time.current.beginning_of_day events = Event.published .where(start_time: target_date..(target_date + 1.day)) events.find_each do |event| EventReminderJob.perform_later(event.id, 0) end end end