Coder Social home page Coder Social logo

upe-garanhuns / msw-beta-2022 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from filipedeschamps/tabnews.com.br

0.0 0.0 0.0 21.67 MB

Conteúdos para quem trabalha com Programação e Tecnologia.

Home Page: https://tabnews.com.br

License: GNU General Public License v3.0

Shell 0.01% JavaScript 9.20% HTML 90.68% PLpgSQL 0.03% HCL 0.09%

msw-beta-2022's Introduction

Sobre

Tabnews é uma plataforma de notícias e entretenimento, criada pelo youtuber Filipe Deschamps. Ela permite que os usuários curtam, compartilhem e discutam notícias e conteúdos interessantes, contribuindo para a construção de um pedaço de internet mais legal. A plataforma apresenta uma interface fácil de usar e oferece acesso a uma ampla variedade de conteúdos, incluindo notícias, artigos, vídeos e imagens. Além disso, a ferramenta permite que os usuários personalizem sua experiência de acordo com seus interesses, garantindo uma navegação mais eficiente e agradável.

As funcionalidades do site Tabnews incluem:

Notícias e Conteúdos: Usuários podem acessar uma ampla variedade de notícias e conteúdos interessantes, incluindo artigos, vídeos e imagens.

Curtir e Compartilhar: Os usuários podem curtir e compartilhar notícias e conteúdos que gostarem em suas redes sociais.

Discutir: A plataforma permite que os usuários discutam notícias e conteúdos, criando um espaço para debates e interações sociais.

Personalização: Os usuários podem personalizar sua experiência de acordo com seus interesses, garantindo uma navegação mais eficiente e agradável.

Interface Fácil de Uso: A plataforma apresenta uma interface fácil de usar, tornando a navegação simples e intuitiva.

Arquitetura do Projeto

Linguagens usadas

  • JavaScript
  • HTML
  • CSS

Estas são as linguagens de programação mais comuns usadas para desenvolver aplicações web, especialmente aplicações front-end. JavaScript é uma linguagem de programação interpretada usada tanto no lado do cliente quanto no lado do servidor. HTML é uma linguagem de marcação usada para criar páginas da web. CSS é uma linguagem de estilo usada para estilizar páginas da web. Juntas, estas três linguagens permitem a criação de aplicações web completas e interativas.

Tecnologias

  • Node.js
  • Express
  • React
  • Postgres
  • React-dom
  • React-router-dom
  • React-scripts

Estas tecnologias são comumente usadas para desenvolvimento de aplicações web, especialmente aplicações de back-end e front-end. Node.js é uma plataforma de tempo de execução do lado do servidor baseada em JavaScript, enquanto Express é uma framework para aplicativos web do Node.js. MongoDB é um banco de dados NoSQL usado para armazenar dados não estruturados. React é uma biblioteca JavaScript para criar interfaces de usuário. React-dom, React-router-dom e React-scripts são pacotes de complementos do React. Juntos, estas tecnologias permitem a criação de aplicações web completas e interativas.

Arquitetura

Com base nas informações fornecidas a arquitetura do projeto é típica de uma aplicação web usando Node.js, Express e React pode incluir as seguintes camadas:

  • Front-end: responsável por exibir informações para o usuário e permitir a interação. O front-end é construído usando React e é executado no navegador do usuário.
  • Back-end: responsável por fornecer dados e realizar operações de negócios. O back-end é construído usando Node.js e Express e é executado em um servidor.
  • Banco de dados: responsável por armazenar dados persistentes. O projeto estar usando Postgres como banco de dados.

Referência

As informações foram obtidas a partir do arquivo package.json no repositório do projeto. Este arquivo lista as dependências do projeto, incluindo as tecnologias e frameworks usados. Além disso, as informações foram baseadas na compreensão geral das tecnologias e frameworks mencionados.

Frameworks

  • Express
  • React

Express é uma framework para aplicativos web do Node.js, que fornece uma estrutura para lidar com requisições HTTP, acessar o banco de dados e fornecer dados ao front-end. React é uma biblioteca JavaScript para criar interfaces de usuário, que fornece uma estrutura para criar componentes reutilizáveis e interativos para aplicativos web.

Em resumo, o Express é usado como framework para o back-end, enquanto o React é usado como framework para o front-end.

Links:

Repositório oficial: https://github.com/filipedeschamps/tabnews.com.br

Github: https://github.com/upe-garanhuns/msw-beta-2022

Regras de contribuição: https://opensource.guide/

IssueTraker: https://github.com/filipedeschamps/tabnews.com.br/issues

Escolha do Projeto:

O TabNews tem como objetivo “Tentando construir um pedaço de internet mais massa”, todos os integrantes do grupo de imediato já compartilhavam ideias parecidas e tinham vontade de integrar mais desse ideal que o TabNews através do open source e colaboração tenta construir. Além disso, devido à identificação dos integrantes com as tecnologias utilizadas no projeto com o fato de ter uma comunidade brasileira ativa interagindo, a escolha do Tabnews foi imediata.

O que levou ao Tabnews:

Em um primeiro momento de investigação foi necessário ir ao cerne do problema e saber porque nos identificamos tanto com o TabNews. A “Revolta” que leva ao autor do projeto a ação e que segue com vários internautas compartilhando esse questionamento é simples “a internet deixou de ser um lugar massa”

Para entender melhor o que nos leva ao Projeto é importante considerar as seguintes palavras do Deschamps:

"Não sei se você compartilha comigo a visão de que recentemente a internet deixou de ser um lugar massa, pelo menos em sites onde a mídia principal é primariamente texto. Tudo está com um ruído tão grande, é tanta propaganda e oferta – quando eu navego por sites assim me surge uma sensação que eu sou uma presa, com 10 predadores prontos para atacar – e a gente ali, no meio dessa confusão toda, tentando extrair algum valor.

Mas já de início não quero passar a impressão errada: não tenho nada contra propaganda, ofertas ou marketing. Produtos e serviços precisam de visibilidade e projetos na internet precisam ser viáveis. Essa é a única forma de algo parar em pé, caso contrário, é apenas uma questão de tempo para qualquer iniciativa sumir do mapa.".

Porquê o Tabnews:

Procurar conteúdo e valor como programador às vezes podem ser desconcertante, citando o criador do projeto Felipe Deschamps: "Conteúdos Com Valor Concreto Para Quem Trabalha Com Tecnologia

Quem trabalha com tecnologia de forma séria precisa consumir conteúdos com valor concreto. Então acho que chegou a hora de darmos um volta de 180 graus e ir na contramão do que está acontecendo atualmente nas redes sociais e voltar com o espírito dos fóruns de antigamente.

Nessa época era possível consumir threads (tópicos) que misturavam informações valiosas tanto na postagem principal, quanto nas respostas (e que muitas vezes traziam mais informações valiosas que a postagem principal).

E algo que contribui para isso acontecer é a plataforma dar o mesmo espaço de criação para quem está publicando o conteúdo originalmente e para quem está respondendo. E você pode fazer esse teste aqui e clicar no botão de responder e notar o tamanho da caixa que abre para você elaborar uma resposta (compare com o espaço que o Facebook ou Instagram dão para uma resposta).

E tão legal quanto isso, é que tudo no TabNews é considerado um conteúdo, tanto que uma resposta possui seu próprio link (a sua própria página exclusiva), independente se é a resposta, da resposta da resposta.

Então é aqui que entra uma mecânica importante: nós vamos desestimular comentários simples, como por exemplo um agradecimento "ah valeu! falou..." em favor de comentários que devolvam algum valor concreto. E caso isso não seja possível, será possível devolver valor ao autor do conteúdo através das TabCoins.".

Conclusão de escolha:

Portanto, é evidente que a ideia que o Tabnews propõe é tentadora e chamativa, deixando claro que a escolha do grupo considera o questionamento principal do autor assim como a motivação de algo centralizado para a comunidade que curte tecnologia.

Nas próprias palavras do Felipe “Nós somos pessoas brutalmente exatas e empáticas, simultaneamente.” Certificando a identificação que o grupo tem com o projeto.

Instalar e rodar o projeto

Rodar o TabNews em sua máquina local é uma tarefa extremamente simples.

Dependências globais

Você precisa ter duas principais dependências instaladas:

  • Node.js LTS v16 (ou qualquer versão superior)
  • Docker Engine v17.12.0 com Docker Compose v1.24.1 (ou qualquer versão superior)

Utiliza nvm? Então pode executar nvm install na pasta do projeto para instalar e utilizar a versão mais apropriada do Node.js.

Clique aqui se precisar de ajuda para configurar o Node.js e o Docker em sua máquina

Dependências locais

Então após baixar o repositório, não se esqueça de instalar as dependências locais do projeto:

npm install

Rodar o projeto

Para rodar o projeto localmente, basta rodar o comando abaixo:

npm run dev

Isto irá automaticamente rodar serviços como Banco de dados (incluindo as Migrations), Servidor de Email e irá expor um Serviço Web (Frontend e API) no seguinte endereço:

http://localhost:3000/
http://localhost:3000/api/v1/status

Observações:

  • Para derrubar todos os serviços, basta utilizar as teclas CTRL+C, que é o padrão dos terminais para matar processos.
  • Você pode conferir o endereço dos outros serviços dentro do arquivo .env encontrado na raiz do projeto, como por exemplo o endereço e credenciais do Banco de Dados local ou o Frontend do Serviço de Email.

Cadastro e Login de usuários

No ambiente de desenvolvimento você poderá tanto criar usuários manualmente (inclusive para receber e testar o email de ativação), quanto utilizar usuários pré-cadastrados e que já foram ativados para sua conveniência.

Manualmente criar um usuário

  1. Após subir os serviços, acesse http://localhost:3000/cadastro
  2. Preencha os dados e utilize qualquer email com formato válido, mesmo que este email não exista, por exemplo: [email protected]
  3. O backend irá enviar um email para o servidor local de emails e que pode ser acessado pelo endereço http://localhost:1080/
  4. Abra o email de Ativação e acesse o link para ativar sua conta de fato.
  5. Com a conta ativa, realize o login: http://localhost:3000/login

Utilizar usuários pré-cadastrados

Por padrão, ao rodar o comando npm run dev será injetado dois usuários ativados, um com features padrões e outro com features administrativas como a habilidade de rodar as Migrations usando a API ou alterar o conteúdo de outros usuários. Segue abaixo as credenciais destes dois usuários ("email" + "senha"):

Rodar os testes

Há várias formas de rodar os testes dependendo do que você deseja fazer, mas o primeiro passo antes de fazer qualquer alteração no projeto é rodar os testes de forma geral para se certificar que tudo está passando como esperado. O comando abaixo irá rodar todos os serviços necessários, rodar os testes e em seguida derrubar todos os serviços.

npm test

Caso queira manter os serviços e testes rodando enquanto desenvolve (e rodando novamente a cada alteração), use o comando abaixo:

npm run test:watch:services

Os logs do Serviço Web e Jest (dos testes) irão se misturar, então caso queira rodar eles de forma separada, abra dois terminais separados e rode o seguinte:

# Terminal 1
npm run dev

# Terminal 2
npm run test:watch

Caso não queira dar watch em todos os testes e queira isolar apenas 1 arquivo de teste (ou um grupo de testes), você pode utilizar um simples regex para dar match no que quiser, por exemplo:

# Rodar apenas /tests/api/v1/_use-cases/registration-flow.test.js
npm run test:watch -- registration-flow

# Rodar todos os testes de "users" da api "v1"
npm run test:watch -- v1/users/

# Rodar apenas /tests/api/v1/users/[username]/patch.test.js
npm run test:watch -- username./patch

# tests/integration/api/v1/contents/[username]/[slug]/get.test.js
npm run test:watch -- contents/.username./.slug./get

Observações:

  • A forma como é tratado o caminho dos arquivos pode mudar dependendo do seu sistema operacional.
  • A forma como o seu terminal interpreta caracteres especiais como / ou [ pode mudar, mas você poderá usar regex para evitar usar esses caracteres, como por exemplo utilizar o . que representa o match com qualquer caractere. Isto foi utilizado nos exemplos acima para evitar os caracteres [ e ] dos arquivos.

Criar novas Migrations

Você pode utilizar o script migration:create, por exemplo:

npm run migration:create alter table users add tabcoins

Isto irá resultar em:

Created migration -- ./infra/migrations/1655399502254_alter-table-users-add-tabcoins.js

Caso esta nova migração esteja válida, ela será automaticamente executada na próxima vez que você rodar o comando npm run dev. Caso contrário, o serviço não irá subir e os logs de erro estarão registrados no arquivo migrations.log encontrado na raiz do projeto.

Commit das alterações

Após finalizar suas alterações e se certificar que todos os testes estão passando com o comando geral npm test, chegou a hora de fazer o commit das suas alterações.

Para ser auxiliado no padrão de commit que utilizamos, rode o comando abaixo e siga as instruções:

npm run commit

Diário de Desenvolvimento

Contribuidores

Lista de contribuidores

Lições aprendidas:

msw-beta-2022's People

Contributors

filipedeschamps avatar aprendendofelipe avatar rodrigokulb avatar savi8sant8s avatar geovani-brito avatar andrefd17 avatar luantoningalvan avatar brunofamiliar avatar dependabot[bot] avatar brenolyes avatar andreghisleni avatar caixetadev avatar miguelmachado-dev avatar 33gustavo33 avatar liverday avatar inovaprog avatar vinicius-arcanjo avatar erickcreis avatar edersonlucas avatar coffeeispower avatar edgleyson-ferreira avatar gabrieldev525 avatar gabrielew avatar eletroswing avatar thenriquedb avatar vitoropereira avatar tembra avatar marxviniciuus avatar omariosouto avatar gabrielsozinho avatar

msw-beta-2022's Issues

Análise de impacto da seção de comentários

Análise de impacto da seção de comentários para evitar quebra do layout

Seção 1:

Print da Issue original: image
Link da Issue original: filipedeschamps#762
filipedeschamps#379

Seção 2:

Link do Youtube: https://youtu.be/-HwFl4JOUo4

Seção 3:

  • Estimativa de Impacto de mudança: Estimamos que a mudança impactará no Frontend devido à alteração ser diretamente no componente que é colocado em tela. Já para o Backend, não enxergamos nenhuma grande mudança ou impacto.
  • Estimativa de Esforço: Estimamos sendo otimistas 3 dia de trabalho, pois estamos considerando os possiveis impecilios que podemos ter.
  • Estimativa de Complexidade: No Frontend, consideramos uma complexidade de nível alto, visto que estaremos mudando a forma como o componente é montado na tela. Já para o Backend, não enxergamos nenhuma complexidade, visto que não pretendemos fazer nenhuma mudança no mesmo.

Análise de Impacto do reCAPTCHA

Análise de Impacto: reCAPTCHA para evitar bots

Seção 1:

Print da Issue original: 331ac22b-2e7f-4a9d-a056-fb2fd2f23496
Link da Issue original: filipedeschamps#986

Seção 2:

Link do vídeo de apresentação: https://www.youtube.com/watch?v=QduA43EpBnc

Seção 3:

  • Estimativa de Impacto de mudança: estimamos impactos moderados no Frontend devido a ser apenas a adição do componente do reCAPTCHA. Já para o Backend enxergamos grandes impactos devido a toda implementação que envolve a autenticação no Tabnews.
  • Estimativa de Esforço: é estimado de forma otimista 1 dia de trabalho para concluir a atividade, porém podendo depender mais 1 dependendo de problemas relacionados a implementação que possam surgir.
  • Estimativa de Complexidade: para o Frontend consideramos uma complexidade de nível baixo, já para o Backend é possível considerar uma complexidade moderada.

Bug na interface ao conter vários comentários aninhados em um único post

Correção: Bug na interface ao conter vários comentários em um único post

Seção 1:

Print da Issue original:
image
Link da Issue original: filipedeschamps#762
filipedeschamps#379

Seção 2:

Link do Youtube: https://youtu.be/RnaTV03c5NI

Seção 3:

- Comportamento atual:
image
No exemplo acima podemos ver que o layout quebra quando se tem muitas respostas em um mesmo post publicado, principalmente quando existem respostas encadeadas de uma resposta anterior.

- Novo comportamento:
image
O novo comportamento que queremos tem como base os comentário do YouTube, quando um usuário responde a outro usuário que já comentou, o sistema faz uma referencia colocando o nome de usuário no início do texto do comentário.

- Análise de impacto inicial:
image
Inicialmente analisamos o código fonte do componente onde está acontecendo esse comportamento e identificamos uma função que é responsável pelo encadeamento dos comentários. À princípio teremos que alterar essa função de modo que, a partir do segundo encadeamento de comentário, a visualização do componente fique abaixo e referencie o comentário anterior, assim como no exemplo dado na seção 2.

reCAPTCHA para evitar bots

Melhoria: reCAPTCHA para evitar bots

Seção 1:

Print da Issue original: 331ac22b-2e7f-4a9d-a056-fb2fd2f23496
Link da Issue original: filipedeschamps#986

Seção 2:

Link do Youtube: https://youtu.be/3ZidlrLczv4

Seção 3:

  • Comportamento atual:
    Atualmente a autenticação do Tabnews utiliza de confirmação por email, criação de tokens com JWT e uma lógica própria de permissionamento, porém essas técnicas não são suficientes para evitar que usuários criem bots para exaurir o sistema com cadastros com vários e-mails, recuperação de senha e logins, por exemplo. Com isso, além dos passos já utilizados, as APIs referentes receberão mais um token que corresponde ao desafio do reCAPTCHA respondido pelo usuário.

  • Novo comportamento:
    Durante a autenticação no site será adicionado o componente do reCAPTCHA ao final dos formulários, a fim de que seja evitado o uso de bots para prejudicar as regras de negócio e dinâmica do Tabnews.
    As imagens abaixo, apresentam respectivamente o componente (checkbox) onde o usuário selecionará que não é um robô e o desafio que ele deverá responder para comprovar.
    image
    image

  • Análise de impacto inicial:

    1. Entender a engine v2 do reCAPTCHA;
    2. Registrar um novo site no painel reCAPTCHA;
    3. Utilizar API keys (chaves fornecidas pelo reCAPTCHA);
    4. Implementar lógica no backend (validação de token);
    5. Implementar componente no frontend (formulários de autenticação);
    6. Integrar as partes do sistema;
    7. Testar e validar melhoria.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.