DEV Community

Gabriel de Luca
Gabriel de Luca

Posted on • Edited on

AluraChallenges #2 ( Intro e Config )

Introdução

Nesta série, irei demonstrar a minha versão do desafio proposto no Alura Challenges #2.

O que é um Challenge da Alura?

"É uma forma de implementar o Challenge Based Learning que a Apple ajudou a criar. Um mecanismo onde você vai engajar em cima de um problema, para só depois investigar soluções com cursos, conteúdo e conversas; ou até mesmo com o conhecimento que você já possui! Finalmente vai agir e colocar seu projeto no ar. Tudo isso com você comentando e ajudando nos projetos de outros alunos e alunas."

No que consiste esse desafio?
Ao longo de 4 semanas foram disponibilizados 1 painel por semana com os cards de funcionalidades que deveriam ser implementadas.

A minha versão

Eu escolhi o framework NestJs para o desafio, que traz uma série de facilidades para o desenvolvimento, além de uma ótima arquitetura.

E como essa série vai funcionar?

A cada semanas, farei posts com as implementações realizadas, que deve seguir mais ou menos assim:

Semana 1:
  • API de Vídeos com rotas implementadas segundo o padrão REST;
  • Validações feitas conforme as regras de negócio;
  • Implementação de base de dados para persistência das informações;
  • Testes das rotas GET, POST, PATCH e DELETE.
Semana 2:
  • Adicionar categorias e seus campos na base de dados;
  • Rotas CRUD para /categorias;
  • Incluir campo categoriaId no modelo video;
  • Escrever os testes necessários.
Semana 3:
  • Paginação de videos
  • Segurança para os recursos
Semana 4:
  • Documentando a API com Swagger
  • Integrando com o front-end
  • Conclusão

Hoje como "dia 0", mostrarei como vamos preparar e configurar tudo o que é necessário para iniciarmos esse projeto, go go go!

Configurando o projeto

Para começarmos a brincadeira, precisamos instalar e configurar o nosso ambiente.

Vou utilizar como IDE o VSCode, que você pode baixar aqui.
Como linguagem de programação, vou utilizar o NodeJs (Typescript) na versão 14, download aqui.

Após o download e instalação deles, vamos criar uma pasta chamada aluraChallenge2 e abri-la no VSCode.
Nele, vamos abrir o terminal integrado
Habilitando o terminal
e digitar os comandos:

npm i -g @nestjs/cli
Enter fullscreen mode Exit fullscreen mode

para instalar o CLI do Nest globalmente e

nest new alura-challenges-2
Enter fullscreen mode Exit fullscreen mode

para criar o novo projeto Nest.
O CLI vai perguntar qual o gerenciador de pacotes que vamos utilizar e escolheremos o npm.
npm choice feito isso, a instalação será feita e uma mensagem de sucesso aparecerá ao final.
sucess install

Legal, criamos o projeto, mas não para por aí. Vamos reabrir o VSCode na pasta alura-challenges-2 que o Nest criou e repare que já nos foi disponibilizado toda uma organização de pastas e configurações de testes, linter, prettier e git, o que já nos adianta demais, só que para elevar ainda mais o nível, vamos adicionar algumas outras ferramentas que vão nos ajudar na padronização do código.

Para que a gente proteja e padronize nossos commits, vamos utilizar os pacotes:
husky e lint-staged

npm install husky@4 lint-staged --save-dev
Enter fullscreen mode Exit fullscreen mode

e adicionar no nosso package.json

"husky": {
  "hooks": {
    "pre-commit": "lint-staged"
  }
},
"lint-staged": {
  "*.ts": [
    "eslint --fix", "npm test", "git add"
  ]
}
Enter fullscreen mode Exit fullscreen mode

vamos instalar também os pacotes commitlint e commitizen

npm i @commitlint/config-conventional @commitlint/cli commitizen --save-dev
Enter fullscreen mode Exit fullscreen mode

Assim que terminar a instalação, execute:

npx commitizen init cz-conventional-changelog --save-dev --save-exact --force
Enter fullscreen mode Exit fullscreen mode

precisaremos agora criar um arquivo na raiz do projeto com o nome commitlint.config.js e o conteúdo

module.exports={
  extends: ['@commitlint/config-conventional']
}
Enter fullscreen mode Exit fullscreen mode

após a criação desse arquivo, vamos executar o comando:

npx mrm lint-staged
Enter fullscreen mode Exit fullscreen mode

e após ele, vamos adicionar mais dois hooks no husky, com os comandos:

npx husky add .husky/commit-msg 'npx commitlint --edit "$1"'
Enter fullscreen mode Exit fullscreen mode
npx husky add .husky/prepare-commit-msg 'exec < /dev/tty && git cz --hook || true'
Enter fullscreen mode Exit fullscreen mode

Com isso, teremos a segurança de que só conseguiremos efetuar commits seguindo os padrões do conventional commits e passando nos testes.
Vamos testar?

Adicionaremos todos os arquivos alterados:

git add .
Enter fullscreen mode Exit fullscreen mode

E faremos o commit:

git commit
Enter fullscreen mode Exit fullscreen mode

Ao fazer isso, o husky irá chamar o lint-staged, que por sua vez rodará os comandos que colocamos no package.json, chamando a CLI do commitlint, se tudo estiver correto.
E a partir daí, você vai preenchendo conforme a sua alteração:
cz_question

Após responder tudo, ele fará o commit (já padronizado)
commit_result

Exemplo: (git log)
git log

Ufa! Por enquanto é isso...

"Uma das melhores formas de aprender é se propor a ensinar..."

Eu criei esses posts com a intenção de exercitar e fixar meus conhecimentos, mas talvez isso ajude você que está lendo também.
Se você gostou desse post, reaja, comente, compartilhe... enfim, faça algo para eu sentir que não falei sozinho. rs

Abraços e até os próximos...

Top comments (0)