NodeJs, Typescript, TDD, Clean Architecture e SOLID
5.0 (210 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
653 students enrolled

NodeJs, Typescript, TDD, Clean Architecture e SOLID

Aprenda de verdade a criar uma API completa com Typescript utilizando TDD, Clean Architecture, Design Patterns e SOLID.
Highest Rated
5.0 (213 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
653 students enrolled
Created by Rodrigo Manguinho
Last updated 5/2020
Portuguese
Portuguese [Auto-generated]
Price: $59.99
30-Day Money-Back Guarantee
This course includes
  • 40 hours on-demand video
  • 1 article
  • 3 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Usar TDD da forma correta
  • Usar o Clean Architecture em uma API feita em NodeJs
  • Usar Design Patterns da forma correta
  • Usar os princípios do SOLID
  • Criar uma API REST completa em NodeJs com Typescript
  • Usar Git da forma correta
  • Usar Docker
  • Publicar uma API feita em NodeJs com Typescript
  • Criar uma API completa com Login, cadastro e um sistema de enquete
  • Usar Integração Contínua
  • Usar Middleware com permissão de acesso
  • Usar recursos avançados do Typescript como Utility Types, Interface, TypeAlias, Modularização de Paths
  • Gerar documentação de API com Swagger
Course content
Expand all 106 lectures 40:01:17
+ Introdução
5 lectures 01:10:07
Código Fonte
00:03

Nessa aula irei explicar qual são os objetivos do treinamento e quais metodologias e ferramentas irei utilizar.

Preview 06:01

Seja bem vindo. Irei iniciar o curso criando atalhos muito importantes no Git para agilizar nosso fluxo de trabalho durante o treinamento.

Preview 11:22

IMPORTANTE:

A versão mais nova do lint-staged (v10.0.0) não aceita mais que utilize o git add no fim do script. Ele já faz isso automaticamente. Basta remover do array de scripts do .lintstagedrc.json a linha do "git add".

A biblioteca eslint-config-standard-with-typescript deve ser usada com a versão 11.0.1. Versões mais recentes dessa biblioteca estão dando conflito com o eslint.

===========================================================================================

Nessa aula irei mostrar como configurar o Git, NPM, Typescript, Jest e EsLint. Com essas bibliotecas configuradas temos o necessário para poder criar testes unitários e também garantir que não teremos commits com problemas de padronização de código.

Além dessas bibliotecas irei configurar nosso projeto para bloquear commits defeituosos (problemas de formatação, testes falhando ou mensagem do commit fora do padrão definido).

Usarei o Javascript Standard Style como padrão pra esse projeto.

Configurando as dependências
35:10

Nessa aula irei mostrar com um diagrama como será a arquitetura usada no projeto. Irei explicar como fazemos para desacoplar nossos controllers e routers de frameworks como express, mongodb, etc.

Irei falar de alguns Design Patterns como Adapter, Dependency Inversion, Composite e aplicar os conceitos do SOLID na nossa arquitetura.

Preview 17:31
+ Bônus
4 lectures 29:15

Nesse vídeo vou explicar como resolver um problema que alguns alunos estão tendo durante o treinamento

Dicas extras
03:50

Nessa aula vou mostrar como resolver um bug que alguns alunos estão tendo

Problema identificado em biblioteca
10:50

Nessa aula irei mostrar como resolver o bug identificado na biblioteca do eslint-standard-with-typescript e mostrar algumas coisas que mudaram no eslint.

Corrigido problema em biblioteca
10:49

Nessa aula irei mostrar como resolver um problema que passou a acontecer com o coverage do Jest após a última versão.

Corrigido problema com coverage do Jest
03:46
+ SignUp API - Presentation Layer
5 lectures 02:15:05

Nessa aula irei iniciar com o TDD. Irei mostrar como começar a criar os primeiros testes em um projeto que ainda não tem nenhum componente. Qual estratégia devemos adotar para ir testando e refatorando o código e como devemos separar os commits de forma correta.

Vamos iniciar testando o componente SignUpController, que é responsável por validar o request recebido pelo client e garantir que um response adequado seja retornado, com status code e mensagem.

Preview 20:48

Nessa aula irei mostrar como criar erros personalizados e ir refatorando o SignUpController para melhorar a legibilidade do código. Além disso irei fazer nosso controller implementar interfaces para deixar o código mais assertivo.

Criando erros personalizados
20:44

Essa é uma aula chave para quem usa TDD. Nessa aula irei mostrar como utilizar Mocks da forma correta. Como fazer para as dependências de uma classe, no arquivo de testes, não interferir nos demais testes.

Utilizando Mocks da maneira correta
24:21

Nessa aula irei mostrar testar a integração do SignUpController com sua dependência do EmailValidator. Como fazer para garantir, com testes, que a integração será feita da forma correta e como fazer também para testar o caso onde a dependência retorna uma exceção.

Além disso irei fazer alguns refactorings para melhorar ainda mais nosso código.

Testando exceções e integrando com o EmailValidator
23:08

Nessa aula irei mostrar outra forma de mockar uma dependência que retorna uma exceção. Além disso irei integrar a camada Presentation com a camada Domain e mostrar como testar todos os casos dessa dependência. Vamos refatorar ainda mais o código, sempre guiado pelos testes, para finalizar o SignUpController com chave de ouro.

Integrando com o AddAccount Usecase
46:04
+ Jest
1 lecture 20:19

Nesse vídeo irei mostrar tudo sobre o Jest. Como configurar corretamente a biblioteca e explicar os principais comandos para você se tornar um especialista nessa ferramenta. Irei também criar diversos scripts de testes para atender diversas situações.

Configurando o Jest e criando scripts de testes
20:19
+ Utils Layer
1 lecture 17:16

Nessa aula irei mostrar como fazer para mockar uma classe que utiliza um framework externo. Você irá aprender na prática a maneira correta de testar esse tipo de componente.

Irei mostrar também na prática 2 design patterns: o Factory e o Adapter.

Criando o EmailValidatorAdapter e mockando o validator
17:16
+ SignUp API - Data Layer
2 lectures 51:31

Nessa aula irei criar a implementação do nosso usecase AddAccount voltada para banco de dados. Irei criar os testes necessários para garantir a integração com o Encrypter, que é uma interface que fará a inversão de dependência para alguma classe que irá implementar cryptografia.

Criando o DbAddAccount e integrando com o Encrypter
26:19

Nessa aula irei finalizar a implementação do DbAddAccount. Irei criar os testes necessários para garantir a integração com o AddAccountRepository, que é uma interface que fará a inversão de dependência para alguma classe que irá implementar acesso a banco de dados.

Integrando com o AddAccountRepository
25:12
+ SignUp API - Infra Layer
3 lectures 01:14:14

Nessa aula irei mostrar como fazer para mockar o bcrypt. Mostrarei também como fazer para isolar coisas que são genéricas na interface e coisas específicas na implementação.

Craindo o BcryptAdapter e mockando o bcrypt
24:57

Nessa aula irei iniciar a testar o nosso primeiro repositório. Ele vai utilizar o MongoDb. Para fazermos testes com o MongoDb iremos recorrer a testes de integração, pois é muito difícil conseguir mockar o MongoDb e não tem nenhuma biblioteca disponível que faça isso bem feito. Para isso utilizaremos um banco de dados em memória, para os testes serem bem rápidos.

Além de configurar o banco de memória irei também criar um helper para o MongoDb para centralizar as operações de conectar e desconectar. Com isso conseguiremos manter apenas uma instância no MongoDb rodando em produção, ao invés de ficar abrindo e fechando conexão em cada comando, o que faz perder muita performance.

Como um bônus, mostrarei um pouco sobre o Git Stash, para casos onde queremos commitar nosso código, mas tem uma parte que ainda está incompleta.

Configurando MongoDb em memória
23:26

Nessa aula irei mostrar como fazer para testar o MongoDb. Irei também refatorar o código para inserir um Mapper na camada de Infra para isolar o Domain de detalhes específicos de implementações, no caso, o MongoDb.

Testando o MongoDb
25:51
+ SignUp API - Main Layer
3 lectures 01:15:55

Nessa aula irei finalmente instalar o express no nosso projeto. Irei mostrar como fazer para criar os middlewares de forma organizada e como fazer também para testá-los de forma eficiente.

Testando middlewares do express
31:37

Nessa aula irei configurar o projeto para importar automaticamente qualquer rota que definirmos na API, para não precisarmos incluir manualmente todas elas.

Irei também criar o teste de integração de rota de SignUp e deixar tudo pronto para fazermos a composição.

Criando teste de integração para o SignUp
17:23

Nessa aula irei finalizar a API de SignUp. Irei criar o Factory para gerar um SignUpController com todas as suas dependências e mostrar como criar um adapter para desacoplar o express de nossos controllers. API finalizada com 100% de code coverage :)

Fazendo a composição do SignUp e desacoplando do express
26:55
+ Bônus
6 lectures 02:04:45

Nessa aula irei mostrar como fazer para garantir que a conexão com o MongoDb não seja perdida. Devemos reconectar com o MongoDb caso isso aconteça.

Testando a conexão com o MongoDb
15:54

Nessa aula irei mostrar na prática como aplicar o Design Pattern Decorator e com isso incluir uma nova funcionalidade aos nossos controllers sem alterar o código deles (que é o Open Closed Principle do SOLID).

Aplicando o Design Pattern Decorator
29:39

Nessa aula irei finalizar os testes do LogControllerDecorator e incluir mais uma dependência, o LogErrorRepository, responsável por gravar os erros de nossa API no banco de dados. Além de todos os testes unitários e de integração, ainda iremos incluir um log de erros. Bugs nunca mais!

Adicionando Log de Erro
25:41

Nessa aula irei adotar uma estratégia importante que é constantemente estar revisando nosso código e melhorar ele, caso possível.

Refatorando os testes
20:50

Nessa aula irei criar a implementação da interface de Log de Erros criada no Data Layer para gravarmos o Log no MongoDb, sempre de forma desacoplada e com testes.

Persistindo Log de Erro no MongoDb
24:03

Nessa aula irei mostrar mais algumas boas práticas do Git. Sempre que subimos versão para a branch master, o correto é criar uma tag com uma release. No Git existem dois tipos de tag: Lightweight e Annotated. Vou explicar a diferença entre elas e mostrar como configurar nosso ambiente para tratar as tags de forma automática.

Além disso irei criar a nova branch de trabalho para criarmos a próxima API: o Login.

Criando Tag e fazendo Push para o GitHub
08:38
+ Login API - Presentation Layer
6 lectures 02:43:58

Nessa aula irei dar início a segunda API do nosso curso, o Login. Vamos iniciar novamente pela camada de apresentação, testando o componente LoginController, que é responsável por validar o request recebido pelo client e garantir que um response adequado seja retornado, com status code e mensagem.

Como já temos interfaces e helpers prontos, dessa vez o processo será um pouco mais rápido, pois poderemos reutilizar os componentes.

Criando o LoginController e validando o request
25:57

Nessa aula irei continuar com os testes do LoginController e dessa vez iremos integrar com o Authentication Usecase. Vamos criar esse caso de uso e garantir a integração correta entre esses componentes com testes unitários.

Testando a integração do LoginController com o Authentication Usecase
27:42

Nessa aula irei mostrar na prática como aplicar o Design Pattern Composite. Vamos mover toda a validação do nosso Controller para um componente de validação e com isso tornar o código reutilizável e respeitar o Open Closed Principle. Podemos incluir mais validações sem precisar alterar nossos Controllers.

Aplicando o Design Pattern Composite 1/3
36:57

Nessa aula irei mostrar na prática como aplicar o Design Pattern Composite. Vamos mover toda a validação do nosso Controller para um componente de validação e com isso tornar o código reutilizável e respeitar o Open Closed Principle. Podemos incluir mais validações sem precisar alterar nossos Controllers.

Aplicando o Design Pattern Composite 2/3
23:40

Nessa aula irei adicionar testes aos Validations e refatorar o LoginController para utilizar o ValidationComposite.

Aplicando o Design Pattern Composite 3/3
38:32

Nessa aula irei fazer alguns refactors para manter a qualidade e organização de nosso código antes de prosseguir com o desenvolvimento do Authentication UseCase.

Refatorando o código
11:10
Requirements
  • Conhecimento em Javascript
  • Conhecimento em Orientação a Objetos
Description

Nesse curso irei demonstrar na prática como criar uma API em NodeJs utilizando Typescript, MongoDb e seguindo as melhores metodologias do mercado. Se você está cansado de cursos básicos e quer realmente aprender sobre conteúdos avançados e relevantes como: Design Patterns, Clean Architecture, SOLID e TDD, você está no lugar certo. O objetivo maior desse treinamento é fazer você sair da sua zona de conforto e ver que existem muitas coisas a serem estudadas para se tornar um líder técnico ou um arquiteto de software.

Vamos criar uma API completa com Login, Cadastro, Criação de Enquetes, Lista de Enquetes, Responder uma Enquete e Resultado da Enquete.

Além de tudo isso irei mostrar na prática como utilizar o Git, Docker, Jest, CI/CD, Swagger da forma correta e como fazer para manter nosso código sempre limpo, organizado e bem estruturado, criando inclusive travas para evitar que códigos defeituosos ou mal formatados sejam commitados em nosso repositório.

Vamos falar sobre o uso correto de middlewares para gerenciamento de permissões nas rotas e segurança na geração de senhas.

Esse curso fará você evoluir mais do que anos de faculdade. Mostrarei pra você, de forma objetiva, todos os conhecimentos que obtive ao longo dos anos de minha carreira. Você terá a oportunidade de evoluir em semanas ou meses o que os programadores sêniors levam anos para aprender.

Who this course is for:
  • Desenvolvedores que querem aprender a programar orientado a testes
  • Desenvolvedores que querem aprender a utilizar Clean Architecture
  • Desenvolvedores que querem aprender a aplicar Design Patterns de forma correta
  • Desenvolvedores que querem aprender a usar os princípios do SOLID
  • Desenvolvedores que querem aprender sobre arquitetura de software
  • Desenvolvedores Javascript
  • Desenvolvedores Typescript
  • Desenvolvedores que querem aprender sobre Docker
  • Desenvolvedores que querem aprender a usar Git de forma correta
  • Desenvolvedores que querem aprender sobre CI/CD