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:
LeSim 2023-05-10 10:03:47 +00:00 committed by GitHub
commit b44a2f9ce4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 10 deletions

View file

@ -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

View file

@ -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) }
end
private instructeurs.in_batches.each_record do |instructeur|
data = instructeur.email_notification_data
def send_batch_of_instructeurs_email_notification(instructeurs) next if data.empty?
instructeurs
.map { |instructeur| [instructeur, instructeur.email_notification_data] } wait = rand(0..SPREAD_DURATION)
.reject { |(_instructeur, data)| data.empty? }
.each { |(instructeur, data)| InstructeurMailer.send_notifications(instructeur, data).deliver_later } InstructeurMailer.send_notifications(instructeur, data).deliver_later(wait:)
end
end end
end end
end end