Cómo eliminar susurros antiguos en masa

Continuando la discusión de Operaciones masivas administrativas:

Busco una forma de eliminar susurros de más de cierta antigüedad de todos los temas.

Generalmente usamos susurros para discutir posibles acciones de moderación, pero una vez que se ha tomado la acción, los susurros no son tan útiles y con el tiempo se convierten cada vez más en ruido.

Podría eliminar publicaciones de más de cierta antigüedad con post_type=4 (susurro), pero esto podría dejar cosas colgando o inconsistentes en la base de datos, o no estar permitido debido a las claves del foro.

¿Existe una forma segura de hacer esto?

Esta sería la forma más limpia de eliminar los 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

Esto funcionará esencialmente como si el usuario Sistema hubiera eliminado cada post manualmente usando el botón de eliminar en el post. He incluido skip_staff_log para que no satures tus registros de personal, pero puedes quitarlo si prefieres que la acción quede registrada.

¿Crees que esto cubrirá tus necesidades?

Creo que eso se ve perfecto, ¡gracias!

Lo probaré en una instancia de prueba y veré cuánto tiempo tarda, ya que probablemente tengamos varios miles de susurros.

Así que esta tarea funciona bien, gracias… pero los susurros simplemente se colapsan y siguen siendo visibles para los administradores y moderadores cuando se expanden.

Esto ordena los temas, pero esperaba que pudieran eliminarse por completo. Me preguntaba si los susurros podrían moverse todos a un nuevo tema y luego eliminarse o ocultarse al menos para los moderadores, pero luego encontré esto: Is there a way to remove all the deleted/hidden posts? y más recientemente: Why is it not possible to permanently delete topics or posts?

Desafortunadamente, lo anterior sugiere que no hay forma de eliminar los datos de forma permanente :frowning: