diff --git a/app/jobs/cron/instructeur_email_notification_job.rb b/app/jobs/cron/instructeur_email_notification_job.rb index a81354da8..756a8b95b 100644 --- a/app/jobs/cron/instructeur_email_notification_job.rb +++ b/app/jobs/cron/instructeur_email_notification_job.rb @@ -1,5 +1,5 @@ class Cron::InstructeurEmailNotificationJob < Cron::CronJob - self.schedule_expression = "from monday through friday at 10 am" + self.schedule_expression = "from monday through friday at 9 am" def perform(*args) NotificationService.send_instructeur_email_notification diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 8158d7e9e..0c17c884e 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -1,19 +1,21 @@ class NotificationService class << self + SPREAD_DURATION = 2.hours + def send_instructeur_email_notification - Instructeur + instructeurs = Instructeur .includes(assign_to: [:procedure]) .where(assign_tos: { daily_email_notifications_enabled: true }) - .find_in_batches { |instructeurs| send_batch_of_instructeurs_email_notification(instructeurs) } - end - private + instructeurs.in_batches.each_record do |instructeur| + data = instructeur.email_notification_data - def send_batch_of_instructeurs_email_notification(instructeurs) - instructeurs - .map { |instructeur| [instructeur, instructeur.email_notification_data] } - .reject { |(_instructeur, data)| data.empty? } - .each { |(instructeur, data)| InstructeurMailer.send_notifications(instructeur, data).deliver_later } + next if data.empty? + + wait = rand(0..SPREAD_DURATION) + + InstructeurMailer.send_notifications(instructeur, data).deliver_later(wait:) + end end end end