[TabNews] As primeiras melhorias da Milestone 7 - Revenue Share

E aí Turma, tudo certo?

O foco da Milestone 7 é a implementação do Revenue Share, que é uma forma de devolver valor aos usuários que participam do ciclo de contribuição do TabNews. Usuários que participam ativamente da criação e qualificação de conteúdos são recompensados com TabCash, que poderá ser utilizado, por exemplo, para a criação de algum tipo de publicidade dentro do TabNews.

A principal funcionalidade sendo debatida (e até já sendo implementada) é a possibilidade de criar "Publicações Promovidas" utilizando TabCash. Serão publicações que aparecerão em destaque na página inicial (e provavelmente em outras páginas do TabNews) e serão mais permissivas quanto ao tipo de conteúdo, podendo até ser exclusivamente comerciais ou pessoais.

Mas, como sempre, continuam ocorrendo diversas outras melhorias, como na manutenibilidade do projeto, correções de bugs, aumento de performance, novas funcionalidades etc. E é sobre algumas dessas melhorias que vamos falar hoje.

Permitir Moderação Listar Usuários

Agora os moderadores podem visualizar a lista de usuários criados ou editados recentemente, o que facilita a identificação de contas falsas ou maliciosas. Isso foi alcançado com aprimoramentos no endpoint protegido GET /users:

  • Adição de paginação: o que permite a exibição de um número limitado de usuários por página. Antes o endpoint retornava de uma vez todos os usuários do TabNews.
  • Ordenação por data de edição: o que facilita a identificação não só das contas criadas recentemente, mas também das que foram alteradas.
  • Permissão de acesso para todos os moderadores: antes não era viável disponibilizar essa lista para todos os moderadores, mas com a adição de paginação, isso se tornou possível.

A melhoria foi realizada pelo @rafael e os detalhes podem ser conferidos em #1676.

URLs para Partes Específicas dos Conteúdos

Agora é possível criar URLs para algumas partes específicas dos conteúdos. Isso foi possível graças à adição de um id em todos os títulos, subtítulos e comentários.

Títulos e subtítulos têm um id que é uma versão slugificada do texto, precedida pelo nome do autor e da palavra content (filipedeschamps-content-revenue-share), e os comentários aproveitam o slug próprio do comentário, também precedido do autor (filipedeschamps-bda62f81-b29b-452e-a214-2c74f67f3338).

Com isso, é possível criar URLs que apontam para essas partes específicas dos conteúdos, bastando adicionar # seguido do id. Por exemplo, para criar um link para o trecho "Revenue Share" do conteúdo "Tentando construir um pedaço de internet mais massa" do @filipedeschamps, basta adicionar #filipedeschamps-content-revenue-share ao final da URL do conteúdo. Veja os exemplos abaixo:

O id facilita a criação de publicações e comentários contendo links de referências para determinados trechos ou outros conteúdos, além de facilitar o compartilhamento externo.

A melhoria foi realizada pelo @rafael, e os detalhes podem ser conferidos no PR #1635 e #1646.

Ainda temos uma melhoria relacionada sendo debatida em #1659, que é a adição de um botão de compartilhamento/cópia para facilitar a obtenção e compartilhamento desses links.

Mensagens nos Formulários

Foram melhoradas algumas mensagens exibidas nos formulários de cadastro e de perfil:

  • Nome de usuário deve conter apenas letras e números, por exemplo: "nomeSobrenome4"
  • Alterar o nome de usuário pode quebrar todas as URLs das suas publicações e comentários.

A melhoria foi realizada pelo @GitHub/lwfe e os detalhes podem ser conferidos em #1691.

Acessibilidade do Menu de Edição

Antes não era possível acessar o menu de edição de um conteúdo ou usuário usando apenas o teclado, o que dificultava o acesso a essa funcionalidade por pessoas que não utilizam mouse.

O problema foi notado pelo @pedromclaro, que comentou sobre a dificuldade no próprio TabNews.

O problema foi corrigido por mim, e agora é possível acessar o menu usando a tecla Tab para navegar até o botão, a tecla Enter (ou barra de espaço) para abrir o menu, e as setas para navegar entre as opções. Mais detalhes podem ser vistos em #1682.

Divisão da Tabela balance_operations

No debate das "Publicações Promovidas", foram levantados alguns requisitos para a implementação. Um deles, que foi categorizado como pré-requisito, envolvia a divisão da tabela que armazenava todas as transações (balance_operations) em três novas tabelas (content_tabcoin_operations, user_tabcoin_operations e user_tabcash_operations), já que ela continha a contabilidade de três ativos independentes: TabCoins de conteúdos, TabCoins de usuários e TabCash.

Essa divisão foi realizada pelo @rafael e os detalhes podem ser conferidos em #1656, #1661 e #1673.

Testes: Substituição do Jest pelo Vitest

A troca da ferramenta de testes do Jest para o Vitest, realizada pelo @GitHub/ErickCReis no PR #1642, reduziu bastante o tempo necessário para executar a bateria de testes.

Validação de Dados

A mudança na validação de dados de entrada e saída, realizada pelo @rafael no PR #1685, padronizou as mensagens de erro, removeu muito código duplicado e validações desnecessárias, e ainda melhorou a performance com a adição de um cache dos esquemas de validação.

Outras Melhorias

  • #1663 Criação do componente createErrorMessage que padroniza o formato das mensagens de erro no front-end.
  • #1644 Permite passar parâmetros para o script test para modificar como os testes devem ser executados, como filtrar pelo caminho dos arquivos.
  • #1645 Refatoração dos componentes de email transacionais com a criação dos componentes link e text.
  • #1662 Permitir desabilitar rotas temporariamente pela variável de ambiente UNDER_MAINTENANCE.
  • #1668 Adiciona a possibilidade de realizar testes de unidade que envolvem componentes React com a biblioteca @testing-library/react.
  • #1668 Refatora a paginação das listas de conteúdos para um componente separado.
  • #1678 Corrige o código de status da resposta da API para o método OPTIONS de 404 para 200.
  • #1678 Cria o erro específico MethodNotAllowedError que retorna 405 ao invés de 404.
  • #1680 e #1696 Sanitiza e reduz a quantidade de campos enviados para o serviço de logs (Axiom).
  • #1676 Cria o model pagination.
  • #1686 e #1708 Refatoração dos testes usando RequestBuilder para diminuir boilerplate.
  • #1704 Corrige os testes de limite de tamanho do slug.
  • #1705 Refatora a validação da presença do título nos conteúdos.
  • #1706 Corrige erro de digitação (contend onde deveria ser content).
  • #1707 Remove async desnecessário de pagination.get.
  • #1715 Remove a biblioteca cross-fetch e muda a set-cookie-parser para devDependencies.

Conclusão

A Milestone 7 está sendo desenvolvida com foco no Revenue Share, com o primeiro objetivo sendo as "Publicações Promovidas". Ainda há muito a ser feito, então se você tiver alguma ideia de como podemos melhorar essa funcionalidade, não deixe de participar da discussão na issue #1491.

E se você quer contribuir com outras melhorias, não deixe de conferir as issues abertas e os PRs em andamento 💪 🚀

Está sendo muito massa acompanhar as melhorias que estão sendo feitas e estou ansioso para o lançamento da funcionalidade de publicações promovidas! :rocket: