지연된 답변을 드려 죄송합니다. 이 문제에 대해 꽤 많이 생각해 보았습니다.
게시물을 보류(pending) 상태로 만드는 것은 게시물을 하드 삭제하고, 재현성에 필요한 모든 데이터를 reviewable의 payload 속성에 저장하는 것을 의미합니다. dependent: :destroy 또는 dependent: :delete_all로 태그된 연관 관계로 인해 이 전환 과정에서 데이터가 손실될까 봐 걱정되어 이 부분을 몇 번이나 다시 작성해야 했습니다. 그러나 몇 가지 테스트를 해본 결과, 이렇게 하는 것이 안전하다고 생각합니다.
토픽에 답글이 없거나 첫 번째 게시물이 아닌 경우 이렇게 하는 것은 적정 수준의 노력이 필요할 것입니다. 게시물을 대기열에 추가하는 모든 로직은 NewPostManager#enqueue 메서드 안에 있으므로, 이를 별도의 클래스로 추출하여 재사용해야 합니다. 승인 후 보류된 게시물은 항상 토픽의 끝에 추가되므로, 특정 위치에 추가하려면 조금 더 작업이 필요합니다.
답글이 있는 토픽을 보류 상태로 되돌리는 것은 이 접근 방식에서는 더 복잡할 것입니다. reviewable로 직렬화하는 것은 다소 과하다고 생각됩니다. 대신 토픽을 일시적으로 숨기는 방식은 어떨까요? 예를 들어, 신뢰할 수 있는 사용자가 스팸으로 신고하면 이미 이렇게 하고 있습니다.
대안으로, 항상 신고 + 삭제(또는 숨김) 방식을 사용할 수 있습니다. 이렇게 하면 모든 것이 훨씬 쉬워집니다. 게시물을 하드 삭제하고 대기열에 추가하는 방식이 더 나은 이유가 떠오르지 않습니다.