filipedeschamps / tabnews.com.br

Conteúdos para quem trabalha com Programação e Tecnologia.
https://tabnews.com.br
GNU General Public License v3.0
5.31k stars 388 forks source link

[Conteúdos] Armazenar (e talvez também exibir) o histórico de edições #461

Open guilfer-dev opened 2 years ago

guilfer-dev commented 2 years ago

Eu não consegui encontrar no escopo do projeto (ainda não familiarizado), mas gostaria de saber se já há um planejamento para mostrar edições realizadas por usuários ou moderadores.

Sei que é possível que o OP ou moderadores realizem mudanças nas publicações e comentários; nesse sentido acho que seria interessante haver um registro historico das edições e, talvez, uma tag de quem e por quê realizou as edições (talvez no estilo do stackoverflow?), assim seria possível ajudar na coerencia de algumas discussões que acabam se tornando mais longas e passam a fazer menos sentido depois de edições (ex: https://www.tabnews.com.br/NathanFirmo/o-tabnews-esta-vulnera-vel-a-ataques-xss), além é claro de aumentar a transparencia (e a percepção dela) na plataforma.

Se essa discussão for pra frente (e imagino que o @filipedeschamps e outros já tenha pensando sobre), eu posso criar a issue da feature e começar a trabalhar nela também, nunca trabalhei com versionamento e seria interessante para o meu aprendizado, mas gostaria de estressar o assunto aqui antes de colocar a mão na massa.

Alguns assuntos relacionados, mas que não elaborei o suficiente:

filipedeschamps commented 2 years ago

@guilfer-dev show meu caro, eu também acredito que um histórico de edição é uma feature sensacional!

Antes de iniciar qualquer tipo de implementação, sugiro discutirmos aqui quais alternativas temos para arquitetar isso. Você já pensou em alguma? Inclusive, precisamos pensar quais campos serão versionados, isto é o que o objeto tem hoje:

  {
    "id": "5e56a78d-eff5-46f7-9d6c-614a9c5aa76b",
    "owner_id": "07ea33ea-78bd-4578-bad2-1cf5323cab07",
    "parent_id": null,
    "slug": "encerramento-milestone-4-ao-vivo-agora",
    "title": "Encerramento Milestone 4: Ao vivo agora 🛑",
    "body": "Turma, estou ao vivo nesse exato momento para o encerramento da Milestone 4!\n\nO link para acesso é esse: https://youtu.be/T-mXz4uxCwk",
    "status": "published",
    "source_url": null,
    "created_at": "2022-07-08T17:00:52.288Z",
    "updated_at": "2022-07-08T17:00:52.288Z",
    "published_at": "2022-07-08T17:00:52.321Z",
    "deleted_at": null,
    "username": "filipedeschamps",
    "parent_title": null,
    "parent_slug": null,
    "parent_username": null,
    "tabcoins": 23,
    "children_deep_count": 7
  },

De largada penso em title, body. Mas iremos também versionar source_url, slug, status? Outra coisa que precisamos pensar é como expor isso na API pública de uma forma que continue simples de consumir. Talvez separar o que é o state atual do histórico?

aprendendofelipe commented 2 years ago

precisamos pensar quais campos serão versionados

Que tal manter o histórico de versão de todos os campos? Para isso, uma opção é praticamente "clonar" o objeto que está sendo editado, mudando só o id, o "status": "edited" e adicionando dois campos, uma referência para o original_id e o edited_at que teria que entrar no constraint unique da mesma forma que o deleted_at.

Com isso não muda nada na forma de consumir a versão publicada, mas será preciso mudar o processo de edição de conteúdo e implementar a consulta das versões obsoletas.

guilfer-dev commented 2 years ago

@filipedeschamps a ideia era discutir mesmo, nunca realizei esse tipo de tarefa e não sei por onde começar. Acredito que haja literatura sobre o assunto e, embora meu tempo livre tenha dado uma apertada, vou procurar para que tenhamos uma discussão produtiva. Minha hipotese é que haja um parseamento com as mudanças que ocorreram, algo tipo o que o proprio git faz, assim não precisa ficar duplicando infomação, apenas os metadados das alterações, e aí seria possível támbem reconstruir a mensagem e destacar com outros formatos as alterações. Acredito que os campos que voce sugeriu sejam os melhores e suficientes, só não acho que o status precisa ser versionado, só mudado para "edited", pois todos os outros status vão ser o mesmo a partir daí. Concorda?

E pensando agora, não tem nada a ver, mas acredito não ser necessário criar outra topico pra isso: voce pretende colocar telemetria (ou já existe?) para o engajamento dos posts e o ganho de tabcoins? Algo como é feito com o youtube pra que o criador de conteúdo tenha melhor noção e possa adaptar suas estrategias?

filipedeschamps commented 2 years ago

E pensando agora, não tem nada a ver, mas acredito não ser necessário criar outra topico pra isso: voce pretende colocar telemetria (ou já existe?) para o engajamento dos posts e o ganho de tabcoins? Algo como é feito com o youtube pra que o criador de conteúdo tenha melhor noção e possa adaptar suas estrategias?

Nós temos um sistema de eventos que anota algumas ações dos usuários e isso pode ser usado como base para esse sistea eu acredito 🤝 mas por hora nenhum plano detalhado sobre isso foi desenvolvido 👍

guilfer-dev commented 2 years ago

Ontem encontrei esse artigo na wikipédia sobre o assunto. Achei bastante interessante e, até que completo. https://en.wikipedia.org/wiki/Diff

Acabei não conseguindo explorar mais, mas deixo aqui como material para discussão.