Salve, beleza? Continua a nossa saga aqui no Domain Dream Design. Agora vamos ver na prática pela primeira vez o módulo Core conversando com o Nest. Isso é bem legal, isso é bem satisfatório, porque depois de todo esse trabalho aí dessa modelagem, a gente tem a satisfação de ver tudo isso funcionando de forma desacoplada, todas as camadas integradas. Então, vamos começar a trabalhar com o Partner ou com o Customer. Tanto faz, com o Partner acho que seria mais interessante. Então, eu vou parar aqui o meu servidor, vou dar o npx nest generate. Eu quero gerar um controller. Como eu quero gerar dentro do módulo de eventos que nós criamos, então vai ser events. E aí, vou usar o notação de plural, normalmente eu tenho feito assim. Então, ele vai criar um controlador aqui dentro do módulo, com um teste, se a gente quiser trabalhar com ele. E já vai registrá-lo, acho que ele vai colocar aqui embaixo, vai registrá-lo aqui na parte de Controllers. Então, aqui eu tenho uma rota barra Partners para poder brincar. E o que a gente teria para poder fazer aqui no nosso Partner? Eu posso listar os partners e criar novos. Então, nós vamos chamar aqui o construtor para receber quem, quem, quem aqui? Partner Service, que é o nosso application service de partner. Então, Partner Service. Show de partner. Então, partner service. Show de bola. Se eu quiser listar, chamo o método list e posso devolver aqui. O nest, você devolvendo aqui uma promessa ou um dado qualquer, qualquer tipo de objeto JavaScript, ele vai renderizar lá como resposta já usando uma API Resting. Então, posso desenvolver qualquer coisa que a gente não tem nenhuma formatação para poder fazer. Já no caso que nós vamos inserir um novo partner, que aí nós temos o método, qual o nome do método? É Create mesmo. E que eu tenho que passar um name. Como que eu recebo esse name aqui? Nós vamos usar um decorator do Nest, decorators espalhados para toda quanta lugar, recebendo o Bore da requisição, e eu posso até tipar esse Bore aqui. Esse tipo não tem nenhum efeito no JavaScript, é apenas decorativo. E eu passo esse Bore para cá, como esse Bore é do mesmo tipo que eu tenho que aceitar no create, então tá tudo certo. E como esse create vai acabar fazendo a criação e devolvendo o partner, a gente pode retorná-lo, que aí ele vai renderizar lá o partner que acabou de ser criado também. Show de bola. Tá. Beleza, então vamos agora rodar aqui a nossa aplicação que dá pra gente poder brincar. Antes disso, na verdade, a gente já instalou aqui o microRMCli. Eu quero fazer aqui um comando que eu tenho até aqui na memória, que é esse aqui, pessoal. Esse comando aqui é muito útil. Quando a gente trabalha apenas com os testes, sempre fazendo reset do banco, mas esse comando aqui faz um refresh no banco. Ele mata todas as tabelas, cria de novo. E eu vou pegar aqui um arquivinho que nós podemos deixar na raiz aqui da source, vai ficar aqui na raiz, vou chamar ele de micro.rm.config.ts ele vai servir para que a gente possa rodar ali com aqueles comandos então, vou tirar esses comentários aqui que não são necessários Ele vai servir para que a gente possa rodar com aqueles comandos. Então, vou tirar esses comentários aqui que não são necessários. E a gente tem que fazer os importes. Será que esses importes estão corretos? Estou achando que não. Então, vou importar todo mundo. Pronto. Todo mundo importado, só que tem um detalhe aqui de diferença, que o nosso banco de dados está no plural, deixa eu até conferir, aqui dentro do database, como eventos ali. Local host até não passei, poderia passar aqui o host só para deixar claro. Beleza. Então, esse comando, esse micro ORM aqui, ele tem uma série de comandos que a gente pode rodar ali para poder administrar o banco de dados, até gerar migrações, que não é assunto nosso aqui. Então, vamos fazer aqui o schema fresh run. O run aqui é para poder forçar. Tem uma outra opção que eu poderia ver todo o SQL que ele iria fazer antes de ver, porque imagina um comando desse em produção seria muito perigoso, poderia matar toda a minha base de dados. Então, vamos dar um enter aqui. ele vai falar ali que eu não tenho um microRM disponível, ele não vai encontrar esse arquivinho, ele tenta buscar ali o JS, como ele está mostrando aqui. Então a gente vai chegar aqui no package.json, nós vamos adicionar uma configuração que vai ser do microRN. Então aquele CLI vai tentar ver daqui quando existir. Então a gente vai colocar aqui o use path node. Ele vai trabalhar diretamente com o TypeScript. E aí eu posso colocar um config path aqui. Ele pode buscar tanto din. .barra source mais um nomezinho do arquivo isso aí serve para questão de desenvolvimento quando a gente tiver desenvolvimento ele pega aqui. Quando tiver em produção ele pega o que está na pasta dist, que vai ser a versão de produção nossa. Então aqui vai ser .js que ele vai compilar. Então agora vamos rodar aqui o banco de dados. Tem os console logs que eu tenho que tirar, que eu deixei em algum lugar. Ele sempre mostra ali o esquema que foi dropado e recriado. Então, agora é bom para que a gente possa começar tudo do zero, que o teste nosso deixou algum lixo. Então, enfim. Rodando aqui o Nest, eu vou colocar aqui um arquivinho API.http, que vai servir também como referência para vocês poderem saber as APIs que estão disponíveis. Aqui está tudo que a gente vai criar em relação às APIs. Com a extensão REST Client, eu posso fazer esses testes de HTTP direto do VS Code, sem mudar de tela, então fica muito simples. Vamos fazer aqui o nosso primeiro teste de Hello World. Hello World está funcionando. Se eu quiser listar os partners, eu não consegui listar os partners. Será que ele não conseguiu? Ah, obviamente eu não consegui listar os partners, faltou aqui a geração da rota. Esse controller aqui com partners, ele vai colocar um prefixo nas rotas, e agora esses dois métodos aqui, eles não estão ligados com uma rota, então tem que ligar com o verbo HTTP. Esse aqui vai ser um verbo GET, a gente importa ali em cima do NESTJS common, e aqui vai ser o posting. Então eu tenho todos os decorators para poder lidar com os verbos. É bem fácil. Então tudo aqui vai ser acessível com barra partner. E eu posso colocar ainda um pathzinho ali se eu quiser, mas trabalhando com o conceito de API REST, a gente mantém aí o resource como sendo partner. Vamos ver se deu alguma zica aqui. Agora sim, ele está mostrando as duas rotas aqui. E aí vamos ver. Eu não tenho nada, então já funcionou. E agora vamos fazer a primeira criação. Aqui o nosso primeiro partner criado. Maravilha. E agora tenho todos os partners disponíveis. Agora eu tenho dois. Eu mandei aqui com o mesmo nome, mas tem o ID e o UID ali totalmente diferente. Então agora vamos criar aqui a questão do... Poderia criar do Customer. poderia criar do customer. Aí é a mesma história, para manter até essa compatibilidade aqui, eu vou colocar customers, porque a gente poderia ter o teste lá dentro. Aí eu faço aqui um customers.controller.test. Eu já tenho aqui o código, é a mesma coisa, não convém a gente ficar repetindo de novo. Aqui está o nosso service, que eu acho que está importado no lugarzinho correto. E o create, ele não existe, que na verdade a gente colocou aqui como register. Maravilha. Então tem que chegar lá no meu Events Module e registrar esse cara. Aqui também a mesma coisa. Customers Controller. Agora vamos ver se ele vai reconhecer as duas rotas de Customer. Reconheceu. Então aqui no API.http, vamos ver se a gente consegue consultar customers, não tem nada. Eu vou criar um novo customer com o CPF, já válido aqui. E aqui já tem um detalhe que eu tenho que ajustar lá na entidade de customer, porque eu não estou pegando o valor na hora do toJSON. E um detalhe importante que eu até não comentei, quando o Nest pega o resultado para ele poder criar a resposta HTTP, ele vê se o objeto tem um toJSON. Então, isso aqui não é colocado por acaso, para a gente poder fazer debug quando é necessário e também para... Na verdade, não só o Nest utiliza isso aí, é mais um padrão mesmo da comunidade. Então, consultando aqui novamente, a gente vai ver que agora o ID é somente um valor simples, inclusive o CPF também, que eu tenho que fazer aqui. Pronto. Vamos consultar aqui novamente todos. Não posso mandar novamente aqui porque ele vai dar um erro por causa do unique lá, se ele tentar fazer a criação de novo com o mesmo cpf ele vai falar que eu estou duplicando, mas pronto já, fizemos aqui a nossa primeira integração, uma vez que eu fiz isso, eu não tive que mudar uma linha no meu application serve sem nada a gente tem como se fosse um Lego que eu vou montando aqui no Nest. Se a gente tiver outras necessidades de armazenar em outras bases de dados, utilizar outro tipo de repositório, tudo vai ficando aqui no Nest. A gente tem lá todo o aparato, toda a aplicação está disponível para que a gente possa montá-la no framework que a gente quiser, do modo que a gente quiser. Na próxima aula, a gente termina aqui os outros endpoints. Então, pessoal, é isso aí. E até a próxima.