(Ab)usando `bumped_at` para alcançar ordenação estilo Reddit

Estou executando um fórum de discussão sobre notícias e política no Discourse. O problema que estou enfrentando é que a ordenação padrão do Discourse resulta em completo caos para o meu caso de uso, já que a idade do tópico importa muito. Para um fórum como o meu, uma ordenação estilo Reddit faria mais sentido; no entanto, entendo que não há uma maneira direta de alcançar isso.

Estou me perguntando se é possível (ab)usar do campo bumped_at para alcançar uma ordenação estilo Reddit fazendo algo como:

def topic_hotness(created_at, like_count)
   /**
      Esta função traduz created_at e like_count
      em uma data bumped_at usando uma fórmula matemática
      semelhante à usada pelo Reddit. Considere bumped_at
      como uma data até a qual precisamos que o tópico permaneça entre os 10 primeiros,
      dada sua data de criação e número de curtidas.
   */
end

add_model_callback(Topic, :before_save) do
   self.bumped_at = topic_hotness(self.created_at, self.like_count)
end

Isso vai funcionar? E quais recursos podem ser quebrados, necessitando de correções? Vi em algum lugar na base de código do Discourse que uma exceção é lançada se bumped_at estiver no futuro. Dependendo da fórmula, o uso desse esquema pode resultar em datas bumped_at no futuro. Alguma opinião?

Alguém?

Desculpe pelo bump.

Não. Use um dos muitos clones do Reddit disponíveis se você quer algo como o Reddit.

Infelizmente, não há nada comparável à qualidade do Discourse por aí, então o Discourse é minha única opção. Na verdade, o Discourse faz quase tudo o que é necessário para esse caso de uso; a única peça que falta é a classificação da página inicial. Já vi pedidos semelhantes no passado (embora sejam poucos), então talvez isso ajude mais pessoas no futuro.

Bom, que gentileza sua dizer isso :wink:

Mas somos estritamente comprometidos com a ordenação cronológica nas conversas e apenas com uma fina camada de threads. Você pode dar uma olhada no plugin Solved, talvez?

Uma alternativa é definir a página inicial do seu site como /top ou /top/daily.

Haha. Posso dizer isso porque estou recebendo uma resposta muito boa da minha comunidade. Os clones do Reddit por aí nem valem a pena tentar.

Não tenho certeza se entendi como o plugin Solved se relaciona com esse problema. Ele interfere na data de bump?

Isso tem seus próprios problemas; a linha do tempo precisa ser de rolagem infinita para manter o usuário engajado. A maioria dos meus usuários vai desistir em vez de navegar pelas categorias.

Acho que o que farei a seguir é experimentar no ambiente de desenvolvimento para ver quais problemas encontrarei se eu sobrescrever bumped_at e ver se consigo aceitar esses problemas como compensações. Ainda não analisei o código, mas parece que o marcador de última visita vai ficar louco, então terei que suprimi-lo. Além disso, acho que a seção “tópicos novos ou atualizados” será prejudicada, o que também pode exigir algumas sobrescritas ou supressões.

Vou compartilhar minha experiência neste tópico, caso alguém mais esteja interessado. Me avisem se conseguirem pensar em qualquer outro problema que isso possa causar.