demarches-normaliennes/app/services/notification_service.rb
Colin Darie f7029615a9
refactor(email): spread sending of instructeur digest emails over time
On envoi parfois plus de 20K mails, ce qui pose des problèmes de délivrance
et quotas si on le fait d'un coup.
On étale donc un peu dans la durée ces envois pour pas limiter le dépassement
de quota.
2023-05-09 11:32:43 +02:00

21 lines
560 B
Ruby

class NotificationService
class << self
SPREAD_DURATION = 2.hours
def send_instructeur_email_notification
instructeurs = Instructeur
.includes(assign_to: [:procedure])
.where(assign_tos: { daily_email_notifications_enabled: true })
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
end
end