
Breve introdução em relação ao desafio que o framework se propõe a resolver e uma visão geral do que iremos aprender no curso.
Aula onde apresento com detalhes a ementa prevista para o curso, bem como a metodologia que será utilizada para que seu conhecimento evolua de forma gradativa.
Serão apresentados os requisitos solicitados pelo nosso cliente.
Com base no entendimento dos requisitos, extraímos as entidades que fazem parte do nosso domínio.
Aplicamos o conceito de API First, e detalhamos as estruturas previstas para os endpoints de nossa API.
IMPORTANTE:
No decorrer do curso essas estruturas serão modificadas. Uma vez que, nosso modelo irá evoluir a medida que avançamos com nossa implementação.
Antes de partirmos para a próxima seção, compartilho com vocês o protótipo do aplicativo que irá consumir a API que iremos desenvolver no decorrer do curso.
Apesar do desenvolvimento do App não ser escopo do nosso curso, entendo que este protótipo irá ajudar no entendimento do que iremos desenvolver daqui pra frente, saindo de uma total abstração para algo mais paupável.
Serão conhecidos os pré-requisitos para criação do projeto em NestJS. Entendimento básico do projeto criado pela CLI do NestJS.
Aula teórica de introdução ao NestJS Modules.
Aula prática, onde criamos nosso primeiro Module.
Aula teórica de introdução ao NestJS Controllers.
Aula prática onde criamos nosso primeiro Nest Controller.
Damos continuidade à implementação de nosso controller, implementando nossos DTOs e Interfaces
Aula teórica de introdução aos Providers e Services do NestJS
Partimos para criação do nosso primeiro NestJS Service, com a implementação do método responsável por "persitir" nosso jogador em memória.
IMPORTANTE: Alguns alunos reportaram que se depararam com o seguinte erro: uuid is not a function.
O material em anexo detalha como solucionar este problema.
Durante nossa aula anterior, realizamos a criação do nosso primeiro Service, e fomos apresentados ao recurso de Injeção de Dependência entregue pelo Nest. Nesta aula, nos aprofundamos nos conceitos deste recurso.
Continuamos a implementação da nossa entidade Jogadores, disponibilizando os endpoints responsáveis pela atualização e consulta dos jogadores
Continuamos a implementação da nossa entidade Jogadores, disponibilizando os endpoints responsáveis pela consulta (por e-mail) e deleção de um jogador.
Vamos criar nosso cluster utilizando o serviço MongoDB Atlas
Utilizando o @nestjs/mongoose, iremos conectar nossa aplicação ao cluster MongoDB. Além disso, criaremos nosso primeiro schema e realizaremos as adequações necessárias em nossa interface para que seja possível persistir nossas informações no banco de dados.
Registramos o schema no escopo de nosso Module Jogadores, refatoramos nosso service e enfim conseguimos conectar nossa aplicação ao MongoDB. No final da aula realizamos nossos testes e demos uma conferida nos dados persistidos.
Aula teórica onde relembramos o fluxo de uma requisição HTTP e partimos para o entendimento dos Pipes no NestJS.
Realizamos a implementação do nosso primeiro Pipe. Entendemos a importância de realizar a validação dos dados e partimos para a prática.
Aprimoramos nosso conhecimento, realizando a implementação de custom Pipe responsável por validar o preenchimento do query parameter e-mail em nossos Handles.
Na aula anterior nos deparamos com um bug e nesta aula iremos refatorar nossa API. Além de refatorar, também lançamos de forma explícita nossas primeiras exceptions: BadRequestException e NotFoundException.
Continuamos refatorando nosso código!
Nesta aula disponibilizamos o endpoint responsável por criar uma nova Categoria.
Nesta aula disponibilizamos o endpoint responsável por consultar Categorias.
Nesta aula disponibilizamos o endpoint responsável por atualizar uma Categoria. Também aprendemos a utilizar o Provider Jogadores em nosso Module Categorias.
Nesta aula implementamos um tratamento global de exceção, fazendo uso de um Nest Exception Filter.
IMPORTANTE: A implementação da entidade Rankings vai ficar para um momento posterior em nosso curso. Deste modo, como parte do desafio, considere apenas a necessidade de implementar as entidades Desafios e Partidas.
Para lhe auxiliar durante o desafio, disponibilizei como anexo desta aula, um Roteiro, que servirá como um guia para você nesta jornada. Não deixe de conferir!
Nesta aula, apresento o resultado da implementação dos endpoints responsáveis por suportar nossa entidade Desafios.
Nesta aula, apresento o resultado da implementação dos endpoints responsáveis por suportar nossa entidade Desafios.
Nesta aula, apresento o resultado da implementação dos endpoints responsáveis por suportar nossa entidade Desafios.
Chegamos na metade do nosso curso!!
Paramos para refletir e seguimos para o caminho da felicidade: Microservices
Damos início a uma nova Era: A Era dos microservices!!!
Aula teórica onde nos aprofundamos nos conceitos do package microservices, disponibilizado pelo NestJS.
Ao adotar o uso de microservices, precisamos revisar nossa Arquitetura e entender o caminho que iremos seguir
Aula onde disponibilizamos, com a ajuda da Bitnami, nosso Broker RabbitMQ na AWS
Nesta aula revisamos nossa versão do Node com o NVM e instalamos as dependências necessárias para continuidade de nossa implementação
Nesta aula iremos começar a criar nosso API Gateway, responsável por redirecionar as requisições para o Message Broker. Neste momento nosso API Gateway está lidando com os endpoints da entidade jogadores.
Nesta aula implementamos o primeiro método do nosso Microservice. Usando o decorator @EventPattern recuperamos uma nova categoria do nosso Message Broker e a persistimos no MongoDB, vendo na prática a aplicabilidade no modelo Pub/Sub.
Para implementar o método consultar categorias, que se baseia no uso do padrão request/response, realizamos adequações relevantes tanto no API Gateway quanto em nosso Microservice.
Parecia que estava tudo bem...., mas quando colocamos nosso microservice à prova, vimos que questões importantes precisam ser tratadas!!!
Nesta aula utilizamos um Interceptor para resolver nosso primeiro problema.
Resiliência é assunto sério! Nesta aula vimos como resolver o nosso segundo problema, combinando o uso do Nest com uma feature especial do nosso Message Broker.
Nesta aula damos continuidade à implementação dos métodos da entidade Categorias, colocando em prática todo o conhecimento teórico que aprendemos no decorrer desta seção.
Nesta aula apresento a migração da entidade jogadores para o contexto baseado em Microservices. Apresento em detalhes as implementações que realizei neste processo de migração, onde colocamos em prática todo o conhecimento obtido durante o curso.
Anexos:
Códigos fontes atualizados, apresentados na aula: api-gateway, micro-admin-backend.
Nesta aula finalizamos a implementação do nosso microservice admin-backend, composto por implementações em nosso api-gateway e no próprio microservice em si. Nesta aula, realizamos o upload da foto do jogador para o S3 da AWS, utilizando um módulo do Nest que é baseado no Multer, um middleware conhecido no mundo Node.
E para fechar com chave de ouro, aprendemos como utilizar variáveis de ambiente no Nest, fazendo uso do módulo @nestjs/config.
Observação: A aula ficou um pouco extensa, mas vale a pena assistir!!!
Nesta aula apresento a migração das entidades desafios e partidas para o contexto baseado em Microservices, onde criamos nosso "micro-desafios".
Apresento em detalhes as implementações que realizei neste processo de migração, onde colocamos em prática todo o conhecimento obtido durante o curso.
Anexos:
Roteiro utilizado na aula;
Definições em JSON atualizadas, das entidades Categorias, Jogadores, Desafios e Partidas;
Códigos fontes atualizados, apresentados na aula: api-gateway, micro-admin-backend, micro-desafios.
Observação: Mais uma aula extensa, porém, com um conteúdo muito relevante. Espero que aproveitem!!!
Nesta aula, como parte do escopo previsto para o microservice rankings, realizamos o processamento de uma partida, preparando o terreno para a disponibilização do ranking, que será montado em tempo de execução.
Como nunca é tarde para melhorar, aproveito para demonstrar uma outra forma de implementar o uso do mongoose integrado ao Nest, a partir de uma abordagem ainda mais elegante.
Observação: Mais uma aula extensa, porém, com um conteúdo muito relevante. Espero que aproveitem!!!
Iremos recuperar os dados processados na aula anterior e montar o ranking em tempo de execução. Utilizando a biblioteca lodash, resolveremos de forma simples problemas que em um primeiro momento parecem complexos.
Nossa solução irá disponibilizar um ranking dinâmico, que varia conforme a data de referência informada na requisição pelo cliente.
Observação: Novamente, muita informação significativa em uma única aula! Em anexo seguem os códigos fontes dos microservices e do API Gateway, contemplando as implementações que realizamos no decorrer desta aula.
Nesta aula criamos o microservice notificações. Quando um novo desafio é registrado, este microservice é responsável por notificar, por e-mail, o adversário. Para fazer isso, utilizamos um novo módulo do Nest em conjunto com o serviço Simple Email Service da Amazon.
Nesta aula reduzimos a responsabilidade de nossos controllers.
Uma introdução ao que será apresentado nesta seção, onde compartilho com os alunos o fluxo do processo de autenticação e os componentes que serão utilizados nesse processo.
Apresento os custos relacionados ao uso do AWS Cognito e o seu nível de uso gratuito.
Nesta aula, a partir de uma integração com o Amazon Cognito, implementaremos os métodos responsáveis por viabilizar o registro e o login dos usuários.
Nesta aula, aprendemos como proteger os endpoints de nossa API. E para atingir este objetivo, combinamos o uso dos NestJS Guards com uma estratégia Passport JWT.
Nesta aula, passamos a conhecer algumas características do Cloud Foundry, uma plataforma que irá nos ajudar a atingir nossos objetivos, ao publicarmos nossas aplicações.
Nesta aula publicamos nossas aplicações em um ambiente Cloud Foundry, disponibilizado pela SAP Cloud Platform.
Para acelerar nosso processo de deploy, utilizamos o serviço de Continuous Integration do GiLab.
Apresentamos detalhes dos serviços AWS que utilizamos do decorrer do curso com o viés de custos.
Nesta aula compartilho a possibilidade de executarmos o RabbitMQ em nossa máquina local, através de uma imagem Docker disponibilizada pela Bitnami.
Nesta aula apresento a utilização de um novo método entregue pela referência ao channel do nosso Message Broker, visando a implementação de uma pequena melhoria no contexto geral de resiliência dos nossos microserviços.
Nesta aula iremos interagir com o Cognito de forma mais detalhada. Também utilizaremos o modo debug para avaliar, em tempo de execução, cenários de exceção da nossa aplicação.
Este curso é para você, desenvolvedor Node.js que quer fazer diferente, entregando soluções modernas, utilizando o framework NestJS em conjunto com serviços Cloud robustos e escaláveis.
NestJS é um framework para desenvolvimento de aplicações backend Node.js.
Atualmente, mesmo considerando a quantidade de excelentes bibliotecas e ferramentas existentes para Node.js, nenhuma delas resolve de forma efetiva o principal problema de uma aplicação javascript server-side: sua arquitetura.
NestJS disponibiliza um conjunto de componentes arquiteturais, que possibilitam aos desenvolvedores a criação de aplicativos escaláveis, com baixo acoplamento e de fácil manutenção.
Neste curso, você aprenderá a combinar o uso do NestJS com serviços em Cloud, para viabilizar a entrega de uma API segura, robusta e escalável, que será construída baseada no uso de Microservices, dentre os quais destacamos:
MongoDB Atlas: Faça uso do MongoDB como serviço, deixando o gerenciamento do seu Cluster para quem conhece do assunto
Amazon SES: Aprenda a notificar seus usuários com este serviço eficiente, escalável e de baixo custo
RabbitMQ: Escalabilidade e resiliência para nosso backend, com este serviço de mensageria que iremos publicar na AWS
Amazon Cognito: Entregaremos a responsabilidade do processo de autenticação para este serviço seguro, escalável e de baixo custo
Cloud Foundry: Publicaremos nosso backend em uma infraestrutura auto-gerenciada e de baixo custo.