Tentei uma forma semelhante, o servidor retorna um erro de tempo limite. Abaixo está o código
# frozen_string_literal: true
module Jobs
class DeleteUserPosts < ::Jobs::Scheduled
every 2.minutes
def execute(args)
return unless SiteSetting.delete_user_topics_enabled?
username = SiteSetting.delete_posts_for_username
posts_per_batch = SiteSetting.delete_posts_in_single_batch.to_i
return unless username.present? && posts_per_batch.positive?
user = User.find_by(username: username)
return unless user.present?
posts = user.posts.order(created_at: :asc)
deleted_count = 0
posts.each do |post|
break if deleted_count >= posts_per_batch
if SiteSetting.delete_user_topics_dry_run?
Rails.logger.error("DeleteUserPosts removeria a Postagem ID #{post.id} (#{post.topic.title} - #{post.excerpt}) (modo de simulação)")
else
Rails.logger.error("DeleteUserPosts removendo a Postagem ID #{post.id} (#{post.topic.title} - #{post.excerpt})")
begin
PostDestroyer.new(Discourse.system_user, post).destroy
deleted_count += 1
rescue StandardError => e
Rails.logger.error("Erro ao excluir a postagem ID #{post.id}: #{e.message}")
end
end
end
# Cancela o job agendado se não houver mais postagens restantes
if posts.size <= posts_per_batch
self.class.cancel_scheduled_job
end
end
end
end