Como excluir sussurros antigos em massa

Continuando a discussão de Operações em Massa Administrativas:

Estou procurando uma maneira de excluir sussurros acima de uma certa idade de todos os tópicos.

Geralmente usamos sussurros para discutir ações potenciais de moderadores, mas, uma vez que a ação foi tomada, os sussurros não são tão úteis e, com o passar do tempo, tornam-se cada vez mais ruído.

Eu poderia excluir posts acima de uma certa idade com post_type=4 (sussurro), mas isso parece poder deixar coisas pendentes ou inconsistentes no banco de dados, ou não ser permitido devido às chaves do fórum.

Existe uma maneira segura de fazer isso?

Essa seria a maneira mais limpa de excluir os posts:

whispers = Post.where(post_type: 4).where("created_at < ?", 1.year.ago)

whispers.find_each do |w|
  PostDestroyer.new(Discourse.system_user, w, skip_staff_log: true).destroy
  putc "."
end

Isso funcionará essencialmente como se o usuário Sistema tivesse excluído cada post manualmente usando o botão de excluir no post. Incluí skip_staff_log para que você não polua seus logs de equipe, mas pode removê-lo se preferir que a ação seja registrada.

Acredita que isso atenderá às suas necessidades?

Acho que ficou perfeito — obrigado!

Vou testar em uma instância de teste e ver quanto tempo leva, já que provavelmente temos algumas milhares de sussurros!!!

Então, essa tarefa funciona bem, obrigado… mas os sussurros simplesmente ficam colapsados e ainda são visíveis por administradores e moderadores quando expandidos.

Isso organiza os tópicos, mas eu esperava que eles pudessem ser completamente removidos por inteiro. Cheguei a pensar em mover todos os sussurros para um novo tópico e, em seguida, excluí-lo ou escondê-lo dos moderadores, pelo menos. Mas então encontrei isso: Is there a way to remove all the deleted/hidden posts? E mais recentemente: Why is it not possible to permanently delete topics or posts?

Infelizmente, as informações acima sugerem que não há como remover os dados permanentemente :frowning: