NestJS: Pode usar mais e mais!
Tags: nestjs, typescript, node, javascript
Published: 2021-12-27 19:36:03

---

Venho trabalhando com NestJS em meus projetos pessoais desde 2019, basicamente são projetos para expor pequenas APIs que servem a alguns poucos e pequenos sites.
Recentemente tive a oportunidade de compor um time que estava usando NestJS de uma forma muito séria e fizemos a implementação de uma API muito robusta que esta escalando mais e mais.
Estou muito satisfeito com o resultado que o NestJS tem nos proporcionado e isso me motivou a fazer esses post.

## O que é NestJS
Framework de NodeJs que possibilita aos desenvolvedores de TypeScript e JavaScript criar aplicações eficientes e capazes de escalar de maneira muito simples e rápida.
Escrevi TypeScript antes de JavaScript porque o NestJS é TypeScript first ou seja, todo o desenvolvimento é baseado em TypeScript mas é claro você ainda pode usar JavaScript (fique à lá vonté).
Um detalhe sobre o NestJS, "por baixo dos panos" NestJS faz uso do nosso querido Express. Você não é obrigado usar o Express, você pode trocar por Fastify. Esse é um post padrão, então vai seguir com o Express no exemplo!

#### Vamos ao tutorial
Primeiramente, vamos instalar e fazer uso da [Nest CLI](https://docs.nestjs.com/cli/overview) que é um command-line que vai nos ajudar a inicializar o projeto, nos ajuda no desenvolvimento e a manter o projeto também.
`$ npm i -g @nestjs/cli
 $ nest new project-name`

Como demonstração neste post vamos criar uma API para registro de contatos.
Execute o comando:
`nest new api-contact`
Quando aparecer a pergunta - Which package manager would you :heart: use? - selecione "npm".
Navega até a pasta:
`cd api-contact`
Você verá a seguinte estrutura inicial do projeto:

![Estrutura básica de um projeto criado com Nest CLI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nd0rrmfy8teau2b0fnuw.png)

O scaffolding do NestJS já traz vários arquivos de projetos que nos ajudam muito durante o desenvolvimento.

Uma coisa, antes de começar a codificar, vamos adicionar o [TypeORM](https://github.com/nestjs/typeorm)

```
npm i --save @nestjs/typeorm typeorm
```

Agora que já temos a dependência do TypeORM instalado, vamos criar nossa primeira entidade.
Crie um arquivo chamado **_contact.entity.ts_**
{% gist https://gist.github.com/tarcisiocorte/0678bed7cd8b6c6d15905c607d64096c %}

Agora vamos fazer uma de uma DTO que será usada para salvar os registros de contatos, então crie o arquivo **_CreateContact.dto.ts_**:
{% gist https://gist.github.com/tarcisiocorte/bc1751d031376e432498e41b41149636 %}

Não vou falar hoje sobre padrão Service Repository, mas pra quem conhece esse conceito vai identificar isso muito fácil no NestJS.
Crie o arquivo **_contacts.service.ts_**:
{% gist https://gist.github.com/tarcisiocorte/a80d5b982f13d69a84604b7865d95643 %}

Obviamente a repository do exemplo salva dados em um banco de dados.
Vou fornecer aqui as configurações que eu usei para o PostgreSQL. Para isso usei o arquivo **_app.module.ts_** que é padrão já fornecido pelo scaffolding do NestJS:

{% gist https://gist.github.com/tarcisiocorte/726af374d767c6da7eb2afcbb2b422a9 %}

Pra facilitar a vida de quem acompanha esse post vou deixar o  arquivo **_docker-compose.yml_** disponível para quem tem interesse de já rodar a imagem de um PostgreSQL e testar a API.
{% gist https://gist.github.com/tarcisiocorte/9dc58fcc86ae418ffb64d15c4db18f49 %}

Até aqui eu só mostrei o exemplo do código de produção, ou seja o código que necessitamos para rodar a API de forma funcional.
Agora, vamos ver a parte do código que corresponde aos Testes Unitários.

Por padrão o NestJS já cria um arquivo de teste que vem junto com o scaffolding.

Para esse exemplo vou deixar o código de testes unitários que usei para testar a nossa service, então veja o código do arquivo **_contacts.service.spec.ts_**:
{% gist https://gist.github.com/tarcisiocorte/acb70fe2d56ae36c183b018e90e5395a %}

Eu implementei alguns poucos testes, porém o que eu quero demonstrar é a facilidade que temos em montar nossos testes unitários com Jest e NestJS.
Veja como é fluída a codificação dos testes.

Código completo do exemplo no :heart:Github, [onde tudo esta](https://github.com/tarcisiocorte/app-demo-nest)!

Conclusão
NestJS é um framework muito estável e de fácil adoção em aplicações de todos os níveis de complexidade isso porque ele é muito simples de se usar e também porque Nest CLI já te serve uma ótima estrutura de código para começo de projeto e de fácil alteração e evolução.