Désolé pour le retard. J’y ai beaucoup réfléchi.
Mettre un sujet en attente signifie supprimer définitivement le message et stocker toutes les données nécessaires pour le recréer dans l’attribut payload de l’élément révisable. J’ai dû réécrire cette partie à plusieurs reprises car j’étais inquiet de perdre des données lors de cette transition à cause des associations marquées avec dependent: :destroy ou dependent: :delete_all. Cependant, après quelques tests, je pense que cela devrait être sûr.
Faire cela lorsqu’un sujet n’a aucune réponse ou lorsqu’il ne s’agit pas du premier message devrait demander un effort faible à modéré. Toute la logique de mise en file d’attente d’un message se trouve dans la méthode NewPostManager#enqueue, nous devrons donc l’extraire dans une classe séparée et la réutiliser. Nous ajoutons toujours les messages en attente à la fin du sujet après approbation, donc les ajouter à une position spécifique demandera un peu plus de travail.
Repasser un sujet avec des réponses en attente devrait être plus compliqué avec cette approche. Le sérialiser dans un élément révisable semble un peu excessif. Pourrions-nous plutôt masquer temporairement le sujet ? Par exemple, nous faisons déjà cela lorsqu’un message est signalé comme spam par un utilisateur de confiance.
Sinon, nous pourrions toujours signaler + supprimer (ou masquer), ce qui rendrait tout beaucoup plus simple. Je ne vois aucune raison pour laquelle la suppression définitive et la mise en file d’attente du message seraient préférables.