Construindo aplicação do zero com node.js: Parte 1
Tags: node, javascript, programming, webdev
Published: 2022-11-03 14:55:50

Fala devs, no mundo do desenvolvimento, para você melhorar ou adquirir uma nova habilidade, não tem como fugir da prática. E eu precisa desenvolver algo para melhorar minhas habilidades em **node.js**, além é claro de poder ajudar os outros. E depois de muito pensar, resolvi desenvolver o projeto descrito abaixo.

## Two-Factor Authentication
Um sistema de autenticação em 2 fatores, nada mais é do que se autenticar em um sistema em duas formas. Diferentemente de acessar um sistema qualquer com apenas o seu e-mail e senha, neste outro tipo de sistema, você posteriormente deve informar alguma outra informação, que provavelmente foi enviada por e-mail, ligação, sms, etc.

Um exemplo claro disso são os sistemas do Google, normalmente quando acesso minha conta de algum equipamento "desconhecido", é necessário que eu informe um código que aparece na tela do meu smartphone.

## Motivo
Falei inicialmente sobre praticar, mas eu também queria mostrar como fazer algo do zero, não que uma aplicação desse nível seja algo extremamente complexo, mas eu acho útil e bem diferente dos padrões de crud.

## Tecnologia
Para quem não conhece, node é um plataforma que nos permite utilizar **JavaScript** para desenvolver do lado servidor/backend. Caso você não conheça, essa é uma ótima forma de aprender, ou caso já tenha familiaridade, nada melhor do que praticar, não é mesmo?

Algo que posso dizer é que não utilizei *TypeScript*, então por esse motivo tive certas "limitações" digamos assim, que pude contornar obviamente, porém trazendo um pouco de complexidade ao projeto.

Outros pontos importantes foram o uso de docker para auxiliar no desenvolvimento, testes, além de aplicar o conceito da arquitetura hexagonal para organizar a aplicação.

## Aprendizado
Acredito que mesmo os sistemas mais simples podem te ensinar bastante, e eu por exemplo, aprendi muito, posso destacar de antemão uma maior prática de testes. Inicialmente utilizei a biblioteca **mocha** para me ajudar, construindo todo o código com a modularização do **commonjs**, e no final fiz a conversão para o **ES6 module**. O que me deu uma dorzinha de cabeça.

Essa "pequena" alteração, fez com que eu tivesse uma perda um tanto importante: não consegui gerar o relatório de cobertura de testes. A biblioteca utilizada tinha um certa limitação com o **ES6 module**, e aí que resolvi mudar para o **Jest**- outra ferramenta de testes - aí refatorei os testes e consegui voltar com o relatório de cobertura, como podem ver abaixo:

![Imagem do relatório de cobertura de testes gerado pelo JEST](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k629lb2t11fx8czptllx.png)

Apesar de algumas coisas não terem um nível tão alto de cobertura, a parte central da aplicação **src/domain**, está 100% testada, sendo realizado testes unitários e de ponta a ponta.

## Prepare-se
Se você realmente quer seguir e executar os códigos dos próximos artigos, um pouco de conhecimento em JS e Docker são imprescindíveis.

## Projeto
Nos próximos artigos vou detalhar a construção do sistema, informando escolhas, bibliotecas, melhorias, etc. E antes que me esqueça, [já vou deixando aqui o link para o código fonte](https://github.com/erandirjunior/Two-Factor-Authentication), seja para estudar, utilizar, melhorar, ou mesmo ignorar completamente.

Vejo vocês nos próximos artigos.