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
|
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)
|
def perform(*args)
|
||||||
NotificationService.send_instructeur_email_notification
|
NotificationService.send_instructeur_email_notification
|
||||||
|
|
|
@ -1,19 +1,21 @@
|
||||||
class NotificationService
|
class NotificationService
|
||||||
class << self
|
class << self
|
||||||
|
SPREAD_DURATION = 2.hours
|
||||||
|
|
||||||
def send_instructeur_email_notification
|
def send_instructeur_email_notification
|
||||||
Instructeur
|
instructeurs = Instructeur
|
||||||
.includes(assign_to: [:procedure])
|
.includes(assign_to: [:procedure])
|
||||||
.where(assign_tos: { daily_email_notifications_enabled: true })
|
.where(assign_tos: { daily_email_notifications_enabled: true })
|
||||||
.find_in_batches { |instructeurs| send_batch_of_instructeurs_email_notification(instructeurs) }
|
|
||||||
|
instructeurs.in_batches.each_record do |instructeur|
|
||||||
|
data = instructeur.email_notification_data
|
||||||
|
|
||||||
|
next if data.empty?
|
||||||
|
|
||||||
|
wait = rand(0..SPREAD_DURATION)
|
||||||
|
|
||||||
|
InstructeurMailer.send_notifications(instructeur, data).deliver_later(wait:)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
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 }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue