Scusa il ritardo. Ci ho pensato molto.
Rendere un post in sospeso significa eliminarlo definitivamente e memorizzare tutti i dati necessari per ricrearlo nell’attributo payload del reviewable. Ho dovuto riscrivere questa logica un paio di volte perché temevo di perdere dati durante la transizione a causa di associazioni contrassegnate con dependent: :destroy o dependent: :delete_all. Tuttavia, dopo alcuni test, credo che sia sicuro procedere.
Farlo quando un argomento non ha risposte o quando non si tratta del primo post dovrebbe richiedere uno sforzo da basso a moderato. Tutta la logica per l’inserimento in coda di un post si trova nel metodo NewPostManager#enqueue, quindi dovremo estrarla in una classe separata e riutilizzarla. Aggiungiamo sempre i post in sospeso alla fine dell’argomento dopo l’approvazione, quindi inserirli in una posizione specifica richiederà un po’ più di lavoro.
Spostare un argomento con risposte nuovamente in stato di sospensione dovrebbe essere più complicato con questo approccio. Serializzarlo in un reviewable sembra eccessivo. Forse potremmo semplicemente nascondere temporaneamente l’argomento? Ad esempio, lo facciamo già quando un post viene segnalato come spam da un utente fidato.
In alternativa, potremmo sempre procedere con la segnalazione + eliminazione (o nascondimento), rendendo tutto molto più semplice. Non riesco a pensare a un motivo per cui l’eliminazione definitiva e l’inserimento in coda del post siano migliori.