Merge pull request #9017 from colinux/spread-instructeur-summary-email
Email: étale un peu dans le temps l'envoi des rapports aux instructeurs pour éviter le quota Dolist
This commit is contained in:
commit
b44a2f9ce4
2 changed files with 12 additions and 10 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue