Vamos meter a mão na massa?

Primeiro vou criar um repositório no github para o Servidor NestJS

/

Eu não sei porquê , mas sempre tendo ou não tendo o projeto em minha máquina eu uso essas opções:

Eu vou criar um novo projeto em minha máquina usando o nome dado ao repositório usando nest new nestjs-api-rest

$ nest new nestjs-api-rest
⚡  We will scaffold your app in a few seconds..

CREATE nestjs-api-rest/.eslintrc.js (666 bytes)
CREATE nestjs-api-rest/.prettierrc (51 bytes)
CREATE nestjs-api-rest/README.md (3339 bytes)
CREATE nestjs-api-rest/nest-cli.json (64 bytes)
CREATE nestjs-api-rest/package.json (1967 bytes)
CREATE nestjs-api-rest/tsconfig.build.json (97 bytes)
CREATE nestjs-api-rest/tsconfig.json (339 bytes)
CREATE nestjs-api-rest/src/app.controller.spec.ts (617 bytes)
CREATE nestjs-api-rest/src/app.controller.ts (274 bytes)
CREATE nestjs-api-rest/src/app.module.ts (249 bytes)
CREATE nestjs-api-rest/src/app.service.ts (142 bytes)
CREATE nestjs-api-rest/src/main.ts (208 bytes)
CREATE nestjs-api-rest/test/app.e2e-spec.ts (630 bytes)
CREATE nestjs-api-rest/test/jest-e2e.json (183 bytes)

? Which package manager would you ❤️  to use? npm
✔ Installation in progress... ☕

🚀  Successfully created project nestjs-api-rest
👉  Get started with the following commands:

$ cd nestjs-api-rest
$ npm run start

                                                                         
                                                          Thanks for installing Nest 🙏
                                                 Please consider donating to our open collective
                                                        to help us maintain this package.
                                                                         
                                                                         
                                               🍷  Donate: https://opencollective.com/nest

A ideia aqui não é falar de git, mas depois de entrar no diretório iniciar o git, adicionar e commitar todo o conteúdo, eu executo os comandos sugeridos que citei que sempre uso.

tá lá: https://github.com/jacksonbicalho/nestjs-api-rest

Então agora vamos lá, vamos partir para colocar o NestJs para funcionar recebendo e respondendo a chamadas HTTP usando o modelo REST e autenticando e gerando usuários usando JWT

Cheguei onde preciso aprender:

Eu não sei qual a melhor abordagem me referindo a modularizar o serviço ou usar os próprios app.* como o próprio serviço, mas vendo pelo meu lado cauteloso, vou começar criando um diretório chamado apps e um users. acho que assim eu garanto de forma mais ágil uma implementação de versionamento da api, algo como POST /v1/login, /v2/login, /v[n]/login…

OPA! descobri que o @nestjs/cli cria pra mim um módulo com a estrutura básica.

Dentro do diretório vou testar se a aplicação está rodando e gerar um módulo chamado user

$ npm run start

> nestjs-api-rest@0.0.1 start seu_caminho/nestjs-api-rest
> nest start

[Nest] 74682   - 14/01/2021 19:43:20   [NestFactory] Starting Nest application...
[Nest] 74682   - 14/01/2021 19:43:20   [InstanceLoader] AppModule dependencies initialized +30ms
[Nest] 74682   - 14/01/2021 19:43:20   [RoutesResolver] AppController {}: +5ms
[Nest] 74682   - 14/01/2021 19:43:20   [RouterExplorer] Mapped {, GET} route +2ms
[Nest] 74682   - 14/01/2021 19:43:20   [NestApplication] Nest application successfully started +2ms
^C
~/dev/nestjs-api-rest (working) $ 

Depois de gerar o módulo, principalmente porquê não sei bem o que vai acontecer, já commitei e coloquei no master (claro no mundo real estaríamos empurrando essas alterações para outro branch)

Vamos ver agora como fazer esse módulo funcionar

O legal de gerar o módulo com o comando do nest generate module user, é que ele já registra o módulo em nossa aplicação pra você

Mas a única coisa que o comando fez por nós, foi gerar o módulo, precisamos de um controller que responda às requisições que pensamos.

Então vamos de: 

$ nest generate controller user
CREATE src/user/user.controller.spec.ts (478 bytes)
CREATE src/user/user.controller.ts (97 bytes)
$ nest generate s user
 CREATE src/user/user.service.spec.ts (446 bytes)
 CREATE src/user/user.service.ts (88 bytes)
 UPDATE src/user/user.module.ts (240 bytes)

Aqui ficou assim:

Agora vou fazer esse módulo responder as minhas solicitações via REST, apenas isso.