diff --git a/app/jobs/onceoff/recover_post_uploads.rb b/app/jobs/onceoff/recover_post_uploads.rb new file mode 100644 index 0000000000..ef3fb0b5aa --- /dev/null +++ b/app/jobs/onceoff/recover_post_uploads.rb @@ -0,0 +1,22 @@ +require_dependency "upload_recovery" + +module Jobs + class RecoverPostUploads < Jobs::Onceoff + MIN_PERIOD = 30 + MAX_PERIOD = 120 + + def execute_onceoff(args) + UploadRecovery.new.recover(Post.where( + "baked_at >= ?", + grace_period.days.ago + )) + end + + def grace_period + SiteSetting.purge_deleted_uploads_grace_period_days.clamp( + MIN_PERIOD, + MAX_PERIOD + ) + end + end +end diff --git a/spec/jobs/recover_post_uploads_spec.rb b/spec/jobs/recover_post_uploads_spec.rb new file mode 100644 index 0000000000..0448bc9adc --- /dev/null +++ b/spec/jobs/recover_post_uploads_spec.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +RSpec.describe Jobs::RecoverPostUploads do + describe '#grace_period' do + it 'should restrict the grace period to the right range' do + SiteSetting.purge_deleted_uploads_grace_period_days = + described_class::MIN_PERIOD - 1 + + expect(described_class.new.grace_period).to eq(30) + + SiteSetting.purge_deleted_uploads_grace_period_days = + described_class::MAX_PERIOD + 1 + + expect(described_class.new.grace_period).to eq(120) + end + end +end