[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:
- https://www.tabnews.com.br/filipedeschamps/tentando-construir-um-pedaco-de-internet-mais-massa#filipedeschamps-content-revenue-share
- https://www.tabnews.com.br/FelipeBarso/tabnews-encerramento-da-milestone-6#filipedeschamps-bda62f81-b29b-452e-a214-2c74f67f3338
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
etext
. - #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
de404
para200
. - #1678 Cria o erro específico
MethodNotAllowedError
que retorna405
ao invés de404
. - #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 sercontent
). - #1707 Remove
async
desnecessário depagination.get
. - #1715 Remove a biblioteca
cross-fetch
e muda aset-cookie-parser
paradevDependencies
.
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 💪 🚀