Este é um pequeno projeto que implementa uma api rest de autenticação usando o framework express e ele consiste em cadastrar usuários na plataforma e também fazer validações usando seu token de autenticação. ele é símples, porém, trouxe vários conceitos como arquitetura limpa, solid testes unitários, validações, contenerização... Além de ferramentas ultilizadas de grande relevância no ecossistema node.
Algo que deve ser observado é que, ele não utiliza banco de dados mas sim um repositório em memória, isto é proposital pois estou implementando inversão de dependência que é um dos conceitos do SOLID, por isso é fácil realizar a troca de repositório a qual vai ser ultilizado. Por mais que não esteja ultilizando qualquer banco de dados ou ORM ou algo semelhante isso não afeta a aplicação pois está muito flexível quando diz respeito de persistência de dados e pode ser configurada da forma que preferir.
- zod
- clear architecture
- SOLID
- unity test
- uuid
- bcrypt
- error handling
- Qualquer usuário poderá se cadastrar na plataforma
- A senha deve conter no mínimo 6 caracteres
- Qualquer usuário poderá fazer login usando as credenciais de forma correta
- O email e o username devem ser únicos
- Qualquer usuário cadastrado vai poder postar um post.
- Qualquer usuário estando cadastrado ou não vai poder ver todos os posts.
- Somente o author do post vai poder deleta-lo.
antes de executar o projeto, é nescessário que na raiz do projeto tenha um arquivo .env criado contendo o seguinte conteúdo:
JWT_SECRET=SRECRET #Chave secreta para assinar o token jwt.
O json web token usa uma chave que deve ser secreta para assinar ou validar o token, por isso ao subir o projeto para produção, deve se colocar uma chave forte para que não seja viável quebrar o token de autenticação.
O projeto pode ser executado de duas formas. A primeira é via node tradicional o que é nescessário ter o node instalado no seu sistema operacional:
Antes de executar é necessário instalar as dependências do projetos rodando:
npm install
Depois executar o servidor em modo de desenvolvimento:
npm run dev
O servidor irá executar em: http://localhost:3000
docker compose up
E da mesma forma o servidor vai executar em: http://localhost:3000, só que desta vez, rodando em um container docker espelhado na porta 3000 do seu SO.
Ao subir o projeto para produção é necesário transpilar os arquivos typescript para javascript para que o node consiga entender de forma nativa, para isso rode o comando:
npm run build
Ao gerar a build do projeto, ele vai criar uma pasta na raiz chamada de build e dentro dela tem um arquivo server.js que será o nosso arquivo de execução principal. Para executar o projeto em produção basta rodar o comando:
npm run start
Os testes são uma parte muito importante da aplicação e é através deles que previnimos bugs e damos mais segurança ao projeto validando entradas, regras de negócio e muito mais. Os testes unitários nessa aplicação foi implementado ultilizado o vitest que é uma ferramenta semelhante ao jest porém muito mais rápida e mais eficiente.
Se você for executar no seu SO (sistema operacional), basta rodar o comando:
npm run test
caso você queira executar os testes via container, primeiro você tem que acessar o bash do container do projeto através do comando:
docker exec -it rest-jwt-auth-server /bin/bash
e depois rodar os testes com:
npm run test
ao executar o servidor, você pode consultar a documentação em http://localhost:3000
eu ultilizei o swagger ui express que é uma ferramenta para documentar APIs Rest que carrega a junto a ele open api que é uma ferramenta de teste muito últil para ajudar no compreensão da api. O servidor swagger está disponível no domínio da aplicação.