Aqui está o que eu consegui:
- O usuário cria um tópico.
- O usuário exclui a postagem do tópico, agendando a exclusão (mudei a configuração do site
delete_removed_posts_afterpara1). - O tópico é excluído após o tempo especificado.
- A equipe desfaz a exclusão do tópico e reverte para a versão original da postagem (apenas restaurar trará a postagem de volta com a mensagem “tópico retirado pelo autor, será excluído automaticamente em 1 hora, a menos que seja sinalizado”).
- O tópico será excluído novamente após algum tempo.
O que está acontecendo: Quando um usuário exclui sua própria postagem de tópico, uma propriedade chamada user_deleted é definida como true. Existe um trabalho em segundo plano chamado DestroyOldDeletionStubs que é executado a cada 30 minutos. Esse trabalho executa a função PostDestroyer.destroy_stubs, que buscará no banco de dados e excluirá todas as postagens que tenham user_deleted definido como true juntamente com um “temporizador de exclusão” expirado.
O problema: Quando a equipe restaura a postagem, user_deleted nunca é definido como false. Portanto, na próxima execução de DestroyOldDeletionStubs, a postagem será excluída novamente.
A solução: Tenho quase certeza de que precisaremos adicionar alguma lógica à função staff_recovered que definirá user_deleted como false (user_recovered já faz isso). Veja: discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub
A correção rápida: Restaure a postagem do tópico e obtenha seu ID, depois vá para o console do Rails e execute:
Post.find_by_id(ID_DA_POSTAGEM).update(user_deleted: false)
O ID da postagem pode ser encontrado facilmente adicionando .json ao final da URL de um tópico. Usando este tópico como exemplo: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. O ID da postagem do tópico é 632362.