tech(refactor): deplace le mail rate limiter dans le module dédié à l'expiration
This commit is contained in:
parent
fb238ff7ac
commit
aecc41490b
5 changed files with 13 additions and 30 deletions
|
@ -1,13 +0,0 @@
|
|||
module MailRateLimitable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
def initialize(rate_limiter: MailRateLimiter.new(limit: 200, window: 10.minutes))
|
||||
@rate_limiter = rate_limiter
|
||||
end
|
||||
|
||||
def safe_send_email(mail)
|
||||
@rate_limiter.send_with_delay(mail)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,6 +1,4 @@
|
|||
class Expired::DossiersDeletionService
|
||||
include MailRateLimitable
|
||||
|
||||
class Expired::DossiersDeletionService < Expired::MailRateLimiter
|
||||
def process_expired_dossiers_brouillon
|
||||
send_brouillon_expiration_notices
|
||||
delete_expired_brouillons_and_notify
|
||||
|
@ -30,7 +28,7 @@ class Expired::DossiersDeletionService
|
|||
dossiers,
|
||||
email
|
||||
)
|
||||
safe_send_email(mail)
|
||||
send_with_delay(mail)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -59,7 +57,7 @@ class Expired::DossiersDeletionService
|
|||
dossiers_hash,
|
||||
email
|
||||
)
|
||||
safe_send_email(mail)
|
||||
send_with_delay(mail)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -81,11 +79,11 @@ class Expired::DossiersDeletionService
|
|||
|
||||
user_notifications.each do |(email, dossiers)|
|
||||
mail = DossierMailer.notify_near_deletion_to_user(dossiers, email)
|
||||
safe_send_email(mail)
|
||||
send_with_delay(mail)
|
||||
end
|
||||
administration_notifications.each do |(email, dossiers)|
|
||||
mail = DossierMailer.notify_near_deletion_to_administration(dossiers, email)
|
||||
safe_send_email(mail)
|
||||
send_with_delay(mail)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -108,7 +106,7 @@ class Expired::DossiersDeletionService
|
|||
DeletedDossier.where(dossier_id: dossier_ids).to_a,
|
||||
email
|
||||
)
|
||||
safe_send_email(mail)
|
||||
send_with_delay(mail)
|
||||
end
|
||||
end
|
||||
administration_notifications.each do |(email, dossier_ids)|
|
||||
|
@ -118,7 +116,7 @@ class Expired::DossiersDeletionService
|
|||
DeletedDossier.where(dossier_id: dossier_ids).to_a,
|
||||
email
|
||||
)
|
||||
safe_send_email(mail)
|
||||
send_with_delay(mail)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class MailRateLimiter
|
||||
class Expired::MailRateLimiter
|
||||
attr_reader :delay, :current_window
|
||||
|
||||
def send_with_delay(mail)
|
||||
|
@ -15,7 +15,7 @@ class MailRateLimiter
|
|||
|
||||
private
|
||||
|
||||
def initialize(limit:, window:)
|
||||
def initialize(limit: 200, window: 10.minutes)
|
||||
@limit = limit
|
||||
@window = window
|
||||
@current_window = { started_at: Time.current, sent: 0 }
|
|
@ -1,6 +1,4 @@
|
|||
class Expired::UsersDeletionService
|
||||
include MailRateLimitable
|
||||
|
||||
class Expired::UsersDeletionService < Expired::MailRateLimiter
|
||||
RETENTION_AFTER_NOTICE_IN_WEEK = 2
|
||||
EXPIRABLE_AFTER_IN_YEAR = 2
|
||||
|
||||
|
@ -16,7 +14,7 @@ class Expired::UsersDeletionService
|
|||
def send_inactive_close_to_expiration_notice(users)
|
||||
to_notify_only(users).in_batches do |batch|
|
||||
batch.each do |user|
|
||||
safe_send_email(UserMailer.notify_inactive_close_to_deletion(user))
|
||||
send_with_delay(UserMailer.notify_inactive_close_to_deletion(user))
|
||||
end
|
||||
batch.update_all(inactive_close_to_expiration_notice_sent_at: Time.zone.now.utc)
|
||||
end
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
describe MailRateLimiter do
|
||||
describe Expired::MailRateLimiter do
|
||||
describe 'hits limits' do
|
||||
let(:limit) { 10 }
|
||||
let(:window) { 2.seconds }
|
||||
let(:rate_limiter) { MailRateLimiter.new(limit:, window:) }
|
||||
let(:rate_limiter) { Expired::MailRateLimiter.new(limit:, window:) }
|
||||
let(:mail) { DossierMailer.notify_automatic_deletion_to_user([], 'tartampion@france.fr') }
|
||||
|
||||
it 'decreases current_window[:limit]' do
|
Loading…
Add table
Reference in a new issue