2021-08-10 00:11:50 +03:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class AccountStatusesCleanupService < BaseService
|
|
|
|
# @param [AccountStatusesCleanupPolicy] account_policy
|
|
|
|
# @param [Integer] budget
|
|
|
|
# @return [Integer]
|
|
|
|
def call(account_policy, budget = 50)
|
|
|
|
return 0 unless account_policy.enabled?
|
|
|
|
|
|
|
|
cutoff_id = account_policy.compute_cutoff_id
|
|
|
|
return 0 if cutoff_id.blank?
|
|
|
|
|
|
|
|
num_deleted = 0
|
|
|
|
last_deleted = nil
|
|
|
|
|
|
|
|
account_policy.statuses_to_delete(budget, cutoff_id, account_policy.last_inspected).reorder(nil).find_each(order: :asc) do |status|
|
2022-11-04 17:31:44 +02:00
|
|
|
status.discard_with_reblogs
|
2022-01-28 01:43:56 +02:00
|
|
|
RemovalWorker.perform_async(status.id, { 'redraft' => false })
|
2021-08-10 00:11:50 +03:00
|
|
|
num_deleted += 1
|
|
|
|
last_deleted = status.id
|
|
|
|
end
|
|
|
|
|
|
|
|
account_policy.record_last_inspected(last_deleted.presence || cutoff_id)
|
|
|
|
|
|
|
|
num_deleted
|
|
|
|
end
|
|
|
|
end
|