fix(data): avoid destroying 2M dossiers in one day due to error in Cron::ExpiredDossiersTermineDeletionJob
This commit is contained in:
parent
9280ccc23d
commit
eb6b23347b
2 changed files with 44 additions and 0 deletions
24
app/tasks/maintenance/spread_dossier_deletion_task.rb
Normal file
24
app/tasks/maintenance/spread_dossier_deletion_task.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Maintenance
|
||||
class SpreadDossierDeletionTask < MaintenanceTasks::Task
|
||||
ERROR_OCCURED_AT = Date.new(2024, 2, 14)
|
||||
SPREAD_DURATION_IN_DAYS = 150
|
||||
|
||||
def collection
|
||||
Dossier.where(termine_close_to_expiration_notice_sent_at: ERROR_OCCURED_AT)
|
||||
.in_batches
|
||||
end
|
||||
|
||||
def process(element)
|
||||
element.update_all(termine_close_to_expiration_notice_sent_at: ERROR_OCCURED_AT + random_date_spread.days)
|
||||
end
|
||||
|
||||
# since we do not keep track of current batch idx,
|
||||
# delay termine_close_to_expiration_notice_sent_at using random approach
|
||||
# should be good enough
|
||||
def random_date_spread
|
||||
rand(1..SPREAD_DURATION_IN_DAYS)
|
||||
end
|
||||
end
|
||||
end
|
20
spec/tasks/maintenance/spread_dossier_deletion_task_spec.rb
Normal file
20
spec/tasks/maintenance/spread_dossier_deletion_task_spec.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
module Maintenance
|
||||
RSpec.describe SpreadDossierDeletionTask do
|
||||
describe "#process" do
|
||||
let(:dossiers) { Dossier.all }
|
||||
let(:dossier_1) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) }
|
||||
let(:dossier_2) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) }
|
||||
let(:dossier_3) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) }
|
||||
let(:dossier_4) { create(:dossier, termine_close_to_expiration_notice_sent_at: Date.new(2024, 2, 14)) }
|
||||
subject(:process) { described_class.process(dossiers) }
|
||||
|
||||
it "works" do
|
||||
expect { subject }.to change { dossier_1.reload.termine_close_to_expiration_notice_sent_at }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue