C [Música] C [Música] k [Música] C [Música] k [Música] k [Música] [Aplausos] [Música] k k [Música] k [Música] aí pessoal chegamos salve das Beleza como que vocês estão estamos começando mais uma live aqui no canal full cycle segundo dia do nosso Esquenta da imersão boa noite para todo mundo hoje é dia 11/02 de2022 estou muito feliz de estar aqui com vocês em mais o começo do nosso evento né na verdade a imersão vai acontecer na semana que vem na segunda-feira então não deixe de se inscrever aí para quem ainda não estác Ito né vou deixar
aqui o link ó imersão py.com.br assim você não perde nada do que vai acontecer na semana que vem nós vamos montar esse estudo de caso que vai ser a construção desse home broker com todas as tecnologias que nós estamos utilizando aqui durante a semana ontem Wesley fez a abertura aí desse esquenta com o docker E hoje nós estamos aqui com o nestjs que é uma das tecnologias que a gente mais fala no canal acho que talvez se você olhar o canal brasileiro que mais tem conteúdo gratuito de n somos nós aqui então nós trouxemos mais
uma vez nós vamos usar lá o nest no nosso estudo de caso também que é um Framework nojs e um dos melhores frameworks pra gente poder criar aplicações de grande porte que suportam microsserviços facilita que você faça integração com vários meios de comunicação então é uma ferramenta se você está escolhendo node na verdade não só está escolhendo node né grandes empresas eh utilizam node vou dar um exemplo aí de a gente sabe de uma empresa que utiliza exaustivamente o nest que é o Boticário não sei se vocês sabem né então Eh fique ligado nessa semana
porque são lives todos os dias às 19 horas para na semana que vem se você está assistindo essas lives você vai aproveitar muito mais entender os conceitos conseguir praticar com a gente eu tenho certeza que você vai evoluir nesses 15 dias né Apesar que a gente conta oficialmente S dias de evento que é a gente conta a partir da segunda-feira que vem mas a gente já tá rolando aqui um pré-evento né então espero que todos estejam já curtindo gostando e já quero deixar aqui uma mensagem Todas as lives ficam aí no canal normalmente o pessoal
fica preocupado né Você tá no final do dia terminou o seu expediente tá cansado não conseguiu ver todas as lives então todas as lives ficam no canal aproveitem para poder maratonar mas eh já vai o aviso né aquela coisa que a gente deixa para depois acaba ficando sempre para depois então já aproveite para ver logo porque se você deixa para depois é deixando depois acaba não vindo né só conteúdo top conteúdo de alto nível que a gente tem aqui inclusive deixa eu dar boa noite pra galera que já tava dando boa noite aqui antes ó
o Edson Bezerra a Carla Samara Mônica Meneses Otávio Ramos Vinícius Martins Marcos Godinho eh Tom Neil o cod Craft Janaína Feitosa Wagner Henrique Igor la falando aula com professor luí sempre tem algo novo né Se tem uma coisa que eu não gosto de fazer apesar de já ter feito algumas vezes porque eh faz parte do trabalho é fazer lives repetidas eu gosto sempre de trazer algum assunto novo então vou empilhando a gente já trouxe aqui com nest nest com apir rest várias tipos de abordagens eh aplicações multi tenas con nest autenticação eh deixa eu lembrar
o que mais com server Cent events que é um tipo de comunicação Eu acho que o websocket é a primeira eh talvez com o tema da Live de websocket eu acho que é a primeira a gente não tinha feito antes algo focado com nest com websockets mas a gente em algum lugar aí do canal Provavelmente você vai achar alguma coisa de websockets né mas a eu gosto sempre de e eh ir variando porque isso aí fica empilhado no canal você pode fazer uma playlist dig T nest aí no no canal full cycle Então você tem
um um cursa de nest aí com monte de aulas ó Boa noite aí pro meu charal luí Carlos também chamo luí Carlos luí Carlos Silva José Duarte Paulo Sarmento Wagner Godói José Antônio Humberto Oliveira Renato Brasil Isaac 2.0 Rafael Pereira sempre aí nas lives com a gente a Taísa Bruna também Wesley Santana É isso aí pessoal quero saber aqui quem tá assistindo a primeira Live aqui no canal FS eu coloque #nato #nato né já quero desejar as boas-vindas principalmente para os novatos mas sejam todos bem-vindos todas bem-vindas espero que vocês curtam esse tempo aqui conosco
a Live vai ser bem legal porque trabalhar com websockets é um assunto bem complexo né quando você vai criar uma aplicação de grande forte permitindo uma comunicação bidirecional eh tem vários tradeoffs e e que você tem que trabalhar E no caso o nest vai nos ajudar bastante com isso e esse meio de comunicação ele vai ser crucial para que a gente tenha ali o Home Broker né porque se você tá numa plataforma que você vai negociar ações e ativos o tempo inteiro você precisa ficar sabendo o que está acontecendo com esses ativos então é preço
subindo preço descendo você cria suas ordens a ordem é executada ordem executada de forma parcial Enfim então tem comunicação entre o seu aplicativo a sua aplicação com o servidor o tempo inteiro então o websocket é um bom meio de comunicação para isso né E a gente vai usar esse meio de comunicação lá na semana que vem no nosso estudo de caso ó o pessoal que é novato aí o Eric Matos o Alexander Love coding ó Gostei do mikel Luiz oficial yof oficial Daniel BR o Carlos falando que outro dia começou a estudar grpc e para
minha para minha feliz surpresa tinha uma live sua mostrando integração com nest e e bem mais fácil do que gerar interface implementar Pois é eu tô falando que eh é o canal brasileiro que tem mais conteúdo de nest Você pode achar em português né obviamente em outro outras línguas eu não sei quem mais é novato Humberto Oliveira Gustavo Stanley mi Silva Alan Jones o Hebert Luiz Costa É isso aí pessoal tem veterano ali ó luí Vital a daane albuer novata né sejam todas bem-vindas todos bem-vindos Maravilha já dei o recado aqui que todas as lives
ficam no canal se inscreva na no link aqui da imersão né vou colocar ele aqui novamente por na semana que vem nós vamos ter todo dia de manhã um vídeo que vai construindo Esse sistema de home broking então num dia ali a gente vai construir com nest outro dia a gente vai usar o kafica outro dia vai vai usar o golang todas Essas tecnologias vão estar aqui durante essa semana você já vai se antecipando né então Eh se você se inscreve você vai ser notificado quando esses vídeos forem publicados e também nós vamos ter lives
à noite com grandes referências e empresas do mercado de tecnologia né a gente traz eh Mercado Livre Rodrigo branas e mais um monte de outra normalmente eh sempre a gente tem ali Rodrigo branas e mercado livro que já é são figurinhas carimbadas né na no evento mas a gente traz várias outras assuntos e pessoas que são referências também então Eh você não vai perder nada né você vai ser notificado dessas lives e também nós temos um grupo no discord porque a gente vai divulgando ali os vídeos desenvolvendo e você vai poder praticar a oportunidade também
de entrar em contato com outras pessoas que estão praticando também e até em contato com a gente nós ajudamos a corrigir os erros né porque o desenvolvimento dessa plataforma não é simples então é um momento de oportunidade para você poder se dedicar e evoluir e ver tecnologias que são usadas por grandes empresas né esse é o intuito da nossa imersão se você não conhece inclusive o canal full pych e a full pych a full pych é uma escola de tecnologia que também é uma faculdade nós temos MBA pós--graduação e o curso full cycle que recente
teve o lançamento da versão 4.0 né então nós somos uma instituição de ensino também nós temos esse canal aqui no YouTube já queria me apresentar aí eu imagino que várias pessoas me conhecem mas meu nome é Luiz Carlos sou C aqui na full pych e também Professor das nossas formações já trabalho aqui com a galera faz mais de 10 anos e tô aí nesse projeto que leva formação para poder de fato especializar desenvolvedores pro mercado né a gente tem algo que a gente é bom é criar desenvolvedores especialistas que vão trabalhar em grandes projetos grandes
empresas que vão conseguir atingir os seus objetivos então fica aí minhas redes sociais tá aqui bem no cantinho da tela né vou levar o dedo aqui ó @ argentinalove LinkedIn github Twitter e tudo mais estou em todas ess redes sociais não faça cerimônia estou à disposição de vocês se quiser bater um papo quiser trocar ideia né eu atendo Já faz anos alunos eh de tudo é quanto é jeito e eu gosto muito desse contato aí mais pessoal com vocês deixa eu ver o que que vocês estão falando mais aqui eh ó O Newton Newton já
trabalhou aqui com a gente o cara top faz um tempo que eu não vejo ele perguntou se a gente vai usar websocket forma distribuída com redis Não nessa aula aqui não tá essa aula nós vamos nós vamos criar um servidor de websocket com nest mais focado em nos conceitos base e depois a gente vai trabalhar com autenticação e ver algumas coisas ali no nest e estão perguntando aqui se eu tenho o meu canal era para ter criado 2024 ainda não tenho e eu acho que vai sair em 2025 recentemente aí eu tive né Eu tô
com filho pequeno algumas coisas mudam Então tá um pouco complicado mas eu tô organizando as coisas para sair em breve Isso vai acontecer eh show de bola pessoal eh já deu um tempo aqui para algumas pessoas entrarem Vamos conversar agora sobre eh esse websocket primeiro tá eh eu não quero só mostrar código aqui e fazer as coisas a gente precisa entender os porquês nosso estudo de caso é voltado para um home broker Home Broker Justamente que são essas plataformas de negociações aí de ativos criptomoedas né Qualquer coisa que vai intermediar a negociação entre pessoas que
estão vendendo pessoas que estão comprando os ativos a gente chama de home broker Então dentro da plataforma de home broker as pessoas vão criar ordens de compra e venda de ativos seja eles quaisquer né sejam etfs né não sei se vocês tem investem aí se não investem recomendado né etfs ações eh criptomoedas até fundos de investimento também enfim elas vão criar essas eh ordem de compra e venda e vão gerenciar as carteiras dos clientes obviamente e também os preços do ativo dos ativos né tô colocando aqui um resumo Core de uma plataforma como essa então
a gente vai ter todo tipo de aplicação se conectando nesse home broker considerando que a gente vai ter ali uma aplicação backend então posso ter aplicativo mobile aplicativo desktop aplicativos web que estão rodando aqui no Browser né a gente tem vários meios de acessar aqui esse home broker e uma característica que é crucial desse tipo de aplicação é que as coisas a gente pode colocar assim as coisas acontecem em tempo real né Aqui não tem tempo para poder respirar são eh milhares ou milhões de pessoas criando ordens de compra criando vendas e aí não ter
outros conceitos né Eu não quero entrar aqui não é da Seara eh livros de ofertas né e e e vão fazer comparações ali entre os volumes de compra e venda assim vai determinando os preços dos ativos mas eh é um tipo de sistema em que você tá recebendo um monte de dados e você tem que também enviar um monte de dados porque você envia as ordens de compra e venda Mas você tá você tem uma série de informações dos ativos ali você tem o preço desses ativos o volume de venda eh e um monte de
outra se ele tá caindo se ele tá subindo né a gente tem uma série de informações quando você abre o Home Broker você vai recebendo isso em tempo real eh não tem tempo para brincadeira né em questão de alguns segundos ou minutos você vai recebendo vendo gráficos e mudanças Então as nossas aplicações clientes elas vão recebendo em informações desse home broker o tempo inteiro e nós temos algumas formas de fazer com que essa comunicação aconteça em tempo real obviamente a gente já conhece a gente já conhece alguns meios de comunicação Imagino que você vai conhecer
alguns do que eu vou falar aqui agora a gente tem o primeiro né que é o mais básico de todos que é o próprio h TP eu consigo fazer uma aplicação que faz essa comunicação em tempo real envio as ordens de compra recebo Toda hora toda vez que um ativo muda de preço eu consigo receber essas notificações sim né então o protocolo http a gente fala que é um protocolo síncrono porque tem que um cliente conseguir Na verdade ele manifesta o desejo de uma comunicação né o servidor de forma espontânea ele não manda algo pro
cliente então eu faço aqui uma request E aí eu recebo aqui uma response o servidor não manda para mim algo de forma espontânea né então no caso de usar uma http a gente até conseguiria fazer um home broker desse mas aí a gente teria que usar uma estratégia chamada de long pulling Porque como é eu cliente que tem que ficar fazendo as chamadas então o long pulling de tempos em tempos aí eh tem várias formas de configurar isso você fica abrindo conexão com o servidor faz uma chamada recebe a resposta Faz a chamada recebe a
resposta você pode fazer de cinco em 5 segundos de 10 em 10 segundos enfim num tempo que você verifica mas eh um problema para uma aplicação em tempo real é justamente que toda hora eu tenho que fazer abrir uma na verdade não é nem só fazer a conexão né quando eu faço a request eu tenho que abrir essa conexão com o servidor para fazer a request E aí ele tem que processar e devolver isso para mim para uma aplicação de tempo real isso não é muito bom bom isso não é muito bom porque nós vamos
ter uma certa latência né E esse e o tempo aqui numa aplicação de home broker é algo muito importante né porque se as pessoas imagina ativos que estão você tá ali na abriu a bolsa de valores ou até mesmo está negociando Bitcoin né que muda Tipo se você pegar um aplicativo qualquer você vê que o preço dele às vezes muda radicalmente em alguns minutos eh se você tiver uma alta latência aqui de comunicação você vai mandar ordens de compra que vão ser executadas mais atrasada porque você tá demorando mais para poder eh receber essa ordem
e executar ela e também toda hora você tá tendo que abrir uma nova chamada para ser notificado de um novo preço isso aqui também tende a consumir mais recursos Toda vez que você força o browser abrir uma comunicação por exemplo com o servidor e receber uma resposta a você tá usando mais CPU e mais memória então o long pulling é uma estratégia que é usada em várias aplicações mas eh ela não vai ser eficiente nesse caso né ela vai ter uma latência maior e vai utilizar mais recursos a gente poderia encabeçar logo aqui também um
graf Kel né o graf Kel também é outro meio de comunicação muito muito famoso que acaba utilizando o http no final das contas mas no final ele acaba se tornando um meio síncrono também né a diferença que eu em vez de ter vários end points ali várias rotas para poder me comunicar eu tenho apenas um barra graphql e aí eu utilizo a linguagem dele para poder fazer a as chamadas né ele acaba retornando as coisas para mim então isso aqui não vai mudar muita coisa porque eu sempre vou ter que ficar fazendo long pulling da
mesma forma apesar do Graphic L ser eficiente para outras coisas então aqui também seria um long pulling nós temos um outro meio de comunicação que é o grpc que a gente fala aqui bastante no canal também grpc o grpc utiliza já coisas mais novas né como o http2 enfim ele é um de comunicação criado pela Google para que a gente possa transportar dados binários entre o servidor e o cliente e aí nós temos uma latência bem menor né E aqui com http2 a gente consegue abrir uma chamada enviar várias coisas enfim e aqui a gente
já tem um ambiente diferente mas tem um problema com o grpc grpc por ele precisar do http2 Então já quebra pra gente poder usar do lado cente então por exemplo browsers eh tipos de rede aplicativos mobile muitos não vão ter suporte http2 não vai conseguir usar esse grpc do lado do cliente o grpc acaba sendo mais eficiente quando eu tenho duas aplicações backend se comunicando né Tem um backend ali que quer se comunicar com outro que é uma comunicação eficiente baixa latência e tudo mais então acaba sendo aqui se eu quiser usar um grpc para
poder fazer algo desse tipo aqui vou ter que jogar um servidor prox na frente e fazer uma conversão né Eu não quero que você entenda isso é só ah os tradeoffs que muitas vezes a gente pode querer forçar a barra em em usar um meio de comunicação para poder resolver um problema isso pode ser uma decisão ruim então o grpc é uma tecnologia que a gente consegue até fazer streaming ficar recebendo eu conseguiria ficar recebendo os preços dos ativos mudanças das ordes e coisas do tipo mas somente em aplicações servidoras que valeriam a pena né
E aí que entra de Fato websocket né como um meio de comunicação eficiente Na verdade eu vou até colocar um outro aqui e aí vai empilhando para que você possa estudar também chamado de server sent events tá nós temos esse outro meio de comunicação que ele acaba usando o http também mas ele usa o http de uma forma mais vamos pegar essa faixa que a gente tem aqui eu vou jogar ela para cá a diferença desse meio de comunicação aqui é que quando eu faço uma chamada primeira chamada ali pro servidor então aqui obviamente eu
abri eu abri uma conexão com o servidor e o modo habitual do h TP quando se devolve a resposta aquela conexão é encerrada Mas com esse server Cent events que é apenas o uso de determinados cabeçalhos do http que que vai acontecer o servidor devolve uma resposta com um header Connection keep Alive então ele informa pro browser para que aquela conexão não seja encerrada então ele devolveu aquela resposta a conexão continua aberta aí nesse caso o servidor pode de forma espontânea continuar mandando respostas pro browser pro cliente enfim qualquer um que esteja utilizando isso aqui
então isso aqui é legal isso aqui daria para poder trabalhar com as notificações mas eh inclusive Serv events utilizando o próprio http não tem restrição nenhuma tô utilizando o próprio protocolo você não tem que fazer nenhuma configuração nova no seu servidor mas aí entam outros problemas eh se você tá utilizando o protocolo http versão 1.1 para cada domínio que você está acessando você só consegue eh abrir seis conexões simultâneas simultâneas simultâneas se você tá utilizando da http2 aí você já consegue ir para 150 mas aí que é o ponto né você não tem como garantir
isso aqui normalmente vai ser seis conexões simultâneas então imaginando num cenário que eu tenho lá eu quero eh ser notificado de 10 ativos já já seria um problema né porque eu não conseguiria Abrir vários canais eu poderia até usar um canal só eh da conexão que eu abri para poder notificar todos os ativos mas eu eu tenho essa limitação mas também tem o ponto que eu tenho que considerar que a velocidade para abrir uma ordem de conta ela é importante n você pode fazer uma chamada http para abrir a ordem de compra e venda mas
o quanto mais rápido ela abrir mais rápido ela vai ser executada e vai ser melhor para o investidor que tá acessando aquele home broker né então de qualquer forma né o server Cent events é que dá chegaria mais próximo a gente ter uma boa comunicação seria compatível com o browser mas tem essas limitações ali e a questão da ordem de compra mesmo assim eu tenho a latência usando o próprio http então é aí que vai entrar o websocket vai entrar o websocket que vai ser um meio ideal para aplicações como home broker então ele vai
funcionar da seguinte forma o websocket é um protocolo Tá mas quando vamos supor que eu esteja aqui no Browser e provavelmente até essa esse site que eu estou desenhando aqui pode ser que ele tenha um websocket por trás a gente tem até Como olhar isso mas eh a gente não começa se conectando no servidor de we socket porque você vai ter um servidor e o cliente pode ser o browser pode ser qualquer outra coisa você faz uma chamada http tá com o header upgrade você passa aí o header upgrade você fala que você quer fazer
upgrade para websocket tá essa chamada comum aqui então Abre ali a conexão aí você recebe uma resposta tá que o servidor vai precisar te autorizar você pode estar autenticado ou não então ele te responde com um header também informando olha beleza eu consegui te eh autorizar aqui vamos embora tá então aí o browser vai fazer aqui a abertura com o servidor usando o protocolo WS que é o protocolo de websocket e a partir daqui eu tenho uma conexão duplex aberta usando o protocolo TCP o principal protocolo de rede que a gente tem hoje que o
o próprio http acaba utilizando ele né então eu crio um canal de Mão Dupla a partir daqui ambos tanto cliente quanto servidor eles podem enviar informações um pro outro usando esse canal que está aberto a qualquer momento então Eh isso aqui a gente chama de eventos então aqui é o cliente enviando um evento pro servidor aqui é o servidor enviando o evento pro cliente mas o legal é que à medida que eu tenho milhares ou milhões de pessoas conectadas no meu servidor de websocket eu posso disparar um evento para todo mundo ao mesmo tempo ou
somente para um segmento de pessoas baseado na regra de negócio que eu tenho e tudo isso usando já essa conexão que tá aberta então Eh por manter essa chamada Aqui duplex o envio das informações bidirecional é muito mais leve é muito mais escalável eu permito enviar milhares de eventos ou receber milhares de eventos num determinado espaço de tempo bem curto né então a gente consegue tanto no caso de um websocket enviar um evento de criação de order a latência vai ser bem menor do que usar o próprio protocolo http eu consigo ficar recebendo o tempo
inteiro ah mudou o preço do ativo mudou 10 vezes por no intervalo de um minuto tem problema nenhum vou receber esses 10 eventos e aí obviamente no front end el E você vai fazer o que tem que ser feito aí isso aí não é assunto obviamente não importa né você vai colocar num gráfico vai usar react vai usar vanila JS vai usar qualquer outra coisa então Eh esse meio de comunicação que ele é eficiente por manter essa comunicação duplex né manter essa esse canal bidirecional e a gente também consegue até otimizar esses eventos que são
enviados H utilizando mensagens binárias ao invés de texto né Então as mensagens que são trafegadas se você precisar a ainda de mais performance Você pode enviar um binário pro servidor o servidor Envia um binário para você e aí Obviamente você vai converter ali pro tipo do dado que você precisa enfim era isso que eu ia explicar para vocês tá e eu preciso que você entenda isso antes da gente continuar fazendo outras coisas aqui Ficou claro isso aqui pessoal está claro mandem para mim aí no chat eu tô vendo aqui o pessoal falando sobre tecnologias então
assim websocket não é um Framework ou nada do tipo você pode implementar websockets com PHP com o próprio node que a gente vai ver aqui com golang com tá você vai é um protocolo Então essas linguagens todas implementam aí que vai obviamente diferir é a maturidade ali da linguagem às vezes que você agrega um Framework para poder facilitar e Como que essa linguagem se comporta utilizando esse protocolo tá a conexão fica sempre aberta aí o que pode acontecer num determinado momento eh a gente tem aqui a o servidor e o cliente Eles precisam saber que
eles estão vivos né como que você sabe que eles estão vivos a gente tem algo chamado de Art Bach guarde essa palavrinha aqui que ela vai ser se você vai evoluindo trabalhando com microsserviços eh com várias outras coisas essa palavra vai aparecer uma hora na que é o coração batendo eh tanto cliente quanto servidor eles vão ficar fazendo envios de dados minúsculos né eles vão ficar fazendo ping pong a gente não faz ali o ping para um site então no intervalo de tempo aqui o cliente faz um ping aí o servidor faz um pong E
aí os dois sabem que eles estão ativos a qualquer momento qualquer um deles pode eh quebrar essa conexão Ah não quero mais e tal me desconectar ali quando você fechar a a aba do browser por exemplo desencadearia uma desconexão lá com o seu servidor essa conexão ela fica sempre aberta tá beleza show de bola então o meu intuito aqui é fazer Ah o uso desse web socket com nodejs eh porque é uma stack bem famosa né pra gente poder criar servidores de websocket você pode usar o próprio ambiente do node para poder fazer essa criação
desse servidor websocket próprio node S tem toda linguagem vai ter né Essas linguagens mais básicas mas no caso do node nós temos o socket io que é uma a biblioteca mais famosa que ela acrescenta ali ela é um Vamos colocar assim um Framework de websocket ela permite que você use os web sockets no nodejs de uma forma mais facilitada e não só do lado do servidor para você poder criar o servidor de websocket do lado do cliente também então ela vai ter ali são duas libes diferentes você vai usar do lado servidor do lado do
servidor lado cliente lado cliente tá e usar o socket io é tranquilo na verdade mas aí vai entrar o nest né que é o Framework que nós vamos usar na nossa imersão e usar aqui na live também ele é um Framework para criação de aplicações web com nodejs n e tem esse gatinho bem bonito aqui é o Framework hoje mais hypado da comunidade porque é um Framework que é muito diverso né você consegue criar aplicações web mas não somente uma API rest você você consegue se comunicar com r teq com aach Cica Criar websockets e
trabalhar com graficel se comunicar com ris se comunicar com nats eh se comunicar com vários bancos de dados por padrão eh ele tem suporte aí aos principais urms da comunidade como ciz Type urm Prisma enfim tá então é é um Framework muito Coringa e também você consegue criar Grandes projetos né porque não somente essa ideia de você trabalhar com integrado com vários meios de comunicação mas o nest dá uma arquitetura modular que você consegue organizar tudo a partir de módulos e esses módulos vão sendo reusados dentro da aplicação você pode criar uma biblioteca transportar ela
para outro módulo enfim e eh é não foi que faltava pra comunidade node a gente não tinha algo como o nest Inclusive a ideia do nest ela veio lá do angol aquele Framework front end não não confundi angular com nest porque eles podem inclusive trabalhar juntos um do lado front um do lado do back beleza para você poder usar o nestjs Obviamente você tem que ter o node instalado na máquina e a última versão que foi lançadas foi semana passada eu acho que é a versão 11 você precisa pelo menos da versão do node ou
21 eu não lembro de cabeça agora mas eh Esso que você tem que instalar aí na sua máquina e lembrando aqui eu já deixo uma dica de configuração de ambiente principalmente para quem tá no Windows se você tá no Windows Experimente O wsl que é o Linux dentro do Windows isso vai mudar a sua vida como desenvolvedor né E aqui no caso e tudo que eu vou fazer aqui na aula vai ser justamente Trabalhando dentro desse próprio wsl nós temos lá Live aqui no canal e tem tutorial de como você fazer a configuração dess wsl
né Nós temos o o melhor tutorial em língua portuguesa e também língua inglesa eu tinha prometido já isso há muito tempo mas eu fiz tá Vou compartilhar ele aqui se vocês quiserem ver esse wsl Mas não deixe de dar uma olhada Você precisa mexer porque se você não mexe com Linux você precisa mexer com Linux beleza Ah deixa eu fazer aqui uma mudança agora eh deixa eu voltar aqui pra tela e tem que tirar aqui o meu banzin Cadê tirar aqui Tirei meu nome ali e agora vem para cá agora tá vendo aqui em cima
fica mais fácil para poder compartilhar a tela vamos brincar um pouquinho com esse nest aqui para você poder criar uma nova aplicação você tem que fazer um npm install né o npm é gerenciador de pacotes do nodejs Aí você faz a instalação do @ né JS barc é o Command Line então eu tenho aqui o Command line do nest tem que fazer na verdade a instalação Global dele né menos G aí você consegue fazer um nest criar novos projetos ó ó o tanto de artefatos que o nest tem né application Class configuration e tudo mais
então vamos fazer aqui a criação de novo projeto nest New eh nestjs test aí ele vai me perguntar qual gerenciador de pacotes eu quero usar o próprio npm E aí ele vai fazer a instalação das coisas aqui para mim Inclusive tem se você usa Java já usou Spring você vai curtir bastante o nest porque ele é muito parecido porque ele vai usar ali o as annotations do Java que aqui no JavaScript são chamad de decorators né parece demais ele tá terminando de fazer instalação ali vamos aguardar pronto então terminou a instalação eu vou entrar no
meu projeto E aí vou fazer aqui um code ponto para abrir convers code Maravilha tá ali o meu projeto vamos fazer aqui o comando npm Run start Dev que é o comando de desenvolvimento eh a gente trabalha com typescript né não diretamente com JavaScript para poder desenvolver então tudo que ele mostra aqui que ele né mostrou que a aplicação Foi iniciada com sucesso é servida aqui a partir do JavaScript que é compilado do typescript que está na pasta source E aí eu consigo acessar aqui o local host na ponta 3000 el vai mostrar um breve
Hello Word aqui não tem nenhuma página né ou de boas-vindas ou algo do tipo como é comum em outros frameworks né então o nest é um Framework modular como eu tinha falado para vocês vamos pegar aqui esse main.ts olha só eu tenho aqui a função que faz o start da minha aplicação né ela tá usando esse next Factory que tá importando do pacote Core do nest então aqui eu passo o meu módulo raiz porque a gente sempre vai ter tudo em módulo então eu tenho um app mod poderia ser qualquer outro nome aí ele importa
por exemplo o user mod importa O Alf mod product mod tudo que você vai fazendo na sua aplicação você coloca em módulos E aí a a a forma que você vai criar esses módulos e organizar as coisas fica o seu critério né mas eh tudo fica plugado aqui no módulo Raiz e aí o nest sabe como e ele já vai te ajudar em uma série de coisas ele vai criar as rotas de automática para você da do do que você vai fazendo Ele trabalha com um conceito de injeção de dependência via contêiner de serviços né
ele cria tudo que você os serviços da sua aplicação ele fica registrado então ele já faz a injeção de dependência automática esses conceitos aí São muito parecidos com outros frameworks que a gente tem de outras linguagens de programação então aqui ele inicia a Instância de aplicação e libera ela na porta 3.000 se eu quiser mudar a porta só passar aqui uma variável de ambiente né então o módulo na verdade é só uma classe que vai ter um decorator em cima e esse decorator está documentando a minha classe o nest sabe que ela vai se comportar
como módulo n então quando ele executa esse Create aqui ele vai varrendo esse módulo pegando os decorators pegando outras coisas que estão importadas E aí ele monta todo o projeto aí eu tenho os controllers que são as rotas que eu vou criando os endereços que eu vou habilitando na minha aplicação e providers são serviços serviços de negócio outros serviços que você eh vai Reus pela aplicação afora Se eu olhar aqui um Controller Olha só um Controller também vai ter decorator né então decorator Eh vai tá espalhado pela toda a aplicação aqui como eu não coloquei
eh nada ele tá com aquele PF raiz né então por isso que eu acessei http 2. bar bar localhost na porta 3000 E aí eu consegui acessar a minha aplicação mas se eu colocar aqui nesse decorator por exemplo barra prefixo olha só aqui agora eu tenho not found porque agora a minha rota é barra prefixo ela voltou a ficar ativo e tudo que eu vou fazendo aqui vai sendo recomp Se Você cometeu algum erro com typescript ele mostra também e E aí as suas rotas na verdade elas vão ser métodos que você liga com decorators
que correspondem aos verbos http Então a gente vai ter aqui verbo post pro decorator post o verbo Pet o verbo delete E aí você coloca em cima dos seus métodos e aqui você pode colocar o pf da Rota então se eu colocar aqui e barra rota então agora para poder acessar essa rota vai ser Barra prefix barra rota se eu acessar esse barra prefixo aqui não funciona mais agora voltou e como que esse Hell tá aparecendo tá vendo que ele tá recebendo aqui a Instância de um serviço chamado de service que na verdade apenas uma
classe que tem ali o get Hello devolvendo Hello Word e ele tem o decorator inject aqui ée não é um contrer el é um serviço que ele pode ser reusado em outros serviços se eu tiver um uma classe serviço um xpto com injectable aqui ele pode simplesmente usar esse App service Só de eu colocar o tipo do serviço e se eu registrar esse App service aqui no meu módulo aqui em providers ele vai conseguir já injetar automaticamente você vê que não tem nenhum lugar aqui no projeto que teve que se fazer um Nil pro app
Controller e nemum new pro app service para poder passar para cá pro Controller né tudo você faz nos módulos porque aí quando o nest monta tudo ele já vai injetando as coisas de forma automática né isso nos ajuda bastante então ele trabalha com esse conceito de contêiner de serviços Então você vai criando os seus módulos né eu posso criar um novo módulo por exemplo nest generate modu users modo de usuário ó ele criou esse arquiv Minho aqui para mim ver que ele mostra o que ele fez que é criar o arquivo e acabou atualizando o
módulo principal Então esse users mod que não tem nada a princípio foi registrado como o módulo filho do app mod né E aí eu posso criar também um Controller dentro dele se eu fizer assim ó de Controller users esse di generate n generate agora Ele criou um Controller para mim com prefixo de users E aí ele vai registrar inclusive esse Controller já no módulo n esse carinha inteligente tá vendo que Ele registrou aqui então se esse Controller tá registrado no módulo e o módulo tá registrado no módulo principal o do já está disponível no Java
não é chamado de decorator não no Java é chamado de annotation tá isso é a mesma é a mesma coisa pessoal annotation na verdade tem até outros nomes tanto faz tá tudo isso é um design pattern vai encontrar eh o Java tem o JavaScript tem o Python tem C Sharp tem enfim é um design patter que ajuda a organizar e você pode usar o decorator tanto para Poder documentar alguma coisa e reusar ela mais tarde né documentação não é para você não tá documentando o seu software Pode até ser mas se você tá documentando ali
aquele lugar para depois eh reusar em algum outro lugar montar alguma coisa ou o decorator também ele pode mudar o comportamento da classe você pode usar o decorator em cima de uma variável ou de um método e tudo mais né Eh Lembrando que decorator não é do typescript é um padrão nativo do JavaScript desde 2017 ó pera aí script é desde 2016 na verdade tá é um padrão do JavaScript beleza nós temos também alguns comandos poderosos vamos supor que eu queira criar um crud inteiro de produto Olha só nest de resarce aí eu falo assim
ó products que vai ser a minha rota aí ele me dá vários meios ali Inclusive eu tenho até websockets aqui se eu quiser né Vou colocar aqui ó rest api quero que ele Gere todos os entry points ele vai instalar aqui só algumas coisinhas a mais mas olha só ele cria aqui pra gente já um módulo completo com um Control com todas as eh os endpoints bonitinhos para você poder criar um produto pesquisar todos Pesquisar pelo um ID aqui é um parâmetro de rotas dois pontos ID atualizar remover ele cria também uma entidade para você
poder modelar o seu banco de dados os dtos que são os corpos das requisições né então e o nest Framework muito Coringa Então eu só queria mostrar essa introdução aqui para que você entenda um pouquinho do nest beleza mas eh deixa eu parar que eu tava rodando aqui na verdade o que eu vou mostrar para vocês é uma aplicação que eu já tenho pronta nós vamos implementar websockets junto tá então deixa eu explicar essa aplicação aqui para vocês é uma aplicação que vai simular Justamente esse conceito aí do Home Broker nós vamos ter ali ordem
de compra venda e os ativos e a questão dos preços a gente vai focar bastante nessa questão do tempo real né a gente precisa ser notificado quando se muda o preço e tudo mais então essa aplicação aqui ela vai ter esses módulos disponíveis a gente tem o módulo dos ativos módulo de autenticação que a gente vai brincar um pouquinho depois das ordens e dos usuários porque se eu tô autenticando né eu separei usuários de autenticação e das carteiras tem relação ali com os ativos tá a gente vai ter um banco de dados aqui para a
gente poder brincar eu quero mostrar esse Dr aqui para vocês para ficar fácil de entender então eu tenho a minha carteira que tá relacionada com usuário que tem nome e-mail e password então nessa carteira eu tenho os ativos eu tenho relação com asset aqui que tem o símbolo do ativo e qual é o preço dele aqui é bem básico né o símbolo poderia colocar lá o o o as letrinhas da da ação então aqui nesse Wallet asset eu tenho lá eh vamos supor ação da Google e aqui esse shares esse shares é um nome categórico
em vez de colocar quantidade a gente fala shares imagina que você tem a Google e ela tem lá 1 milhão de ações Então você tem esses 1 milhão 1 milhão de pedacinhos shares é uma fração da empresa então você não coloca você não tá eh porque se você tivesse no e-commerce você compraria a quantidade de um produto aqui você fala shares tá trouxe esse conceito só para um conhecimento aí além da Live né e aqui a ordem né Eh quando eu tô comprando novo ativo eu tenho a carteira envolvida o ativo Wallet id o asset
id o quanto que eu estou comprando e o preço tá então é um banco de dados bem simples um mais Kell na verdade que eu vou acabar utilizando aqui então o que eu fiz nessa aplicação foi eh espelhar um banco de dados que faz alguns crudes e a gente vai trabalhar com esse websocket Então eu tenho aqui um banco de dados MySQL que a gente vai subir com o docker Né que é um assunto da Live de ontem então para você poder rodar Esse aqui esse projeto você tem que ter o docker instalado na sua
máquina esse aqui é um contêiner que a gente vai subir do mais Kell na versão 8030 traço deban aí imagenzinha que eu já tenho aqui na minha máquina aqui eu exponho ele na porta 3000 Wesley explicou ontem né Nós temos o contêiner que é um processo isolado lá dentro do isolamento desse processo o banco de dados roda na porta habitual que a gente tá pegando a imagem dele mas essa porta não é acessível então na nossa máquina eu tô espelhando a 3306 poderia colocar qualquer outra porta Então essa porta é a da minha máquina a
segunda é a do coner Então essa primeira poderia ser qualquer coisa tá e aqui são duas variáveis de ambiente para que eu possa gerenciar o banco então definindo a senha do root do usuário root que vai ser Rot também e o my Database que é njs tá então a primeira coisa que eu vou fazer aqui como eu estou usando docker comp vou fazer um docker compose up Inclusive eu acho que o meu doc tá em modo standby esse aqui é o meu doc é desktop tá vendo ele tá aqui resource save pronto então meu banco
de dados subiu e agora eu vou rodar a minha aplicação com o start Dev tá E aqui ele tá dando um erro que eu não tenho que aqui exatamente Ah que eu não instalei nada né então V fazer aqui ó npm instal eu tinha tirado a node mods npm Run start dois pontos Dev pronto essa aplicação aqui obviamente tem mais coisas a gente consegue ver aqui pelas rotas né que ela tem ali as rotas dos ativos tem aqui a autenticação eu vou disponibilizar o projeto para download no final da aula Beleza eh deixa eu ver
o que mais aqui Lucas Oliveira perguntou fez uma pergunta aqui aproveitando a configuração de ambiente Luiz você usa aquele arquivo de configuração wsl config para limitar memória e CPU para o wsl tive que configurar aqui porque tava sugando toda a memória e processador do meu PC é o que que acontece com wsl é assim ó ele vai ter acesso a eh 100% do CPU e 85% da memória RAM tá ele só consome o que ele precisa mas o que acontece como ele é uma AVM por exemplo se você vai usando aqui o vs code conectado
lá no wse ele vai usando outras coisas então ele vai fazendo um Cash dessa VM e esse Cash é feito na memória para poder acelerar e aí como ele não vai devolvendo esse Cash aí ele vai sequestrando se você quiser fazer um dropping manual pode rodar Esse comando aqui ó Eco 1 su do Ti você tá matando o Cash o drop Cash que é justamente esse caminho aqui tá Isso é só um assunto aleatório aí respondendo a a pergunta beleza reiniciar wsl também funciona tá eh Beleza então tô aqui com a minha aplicação que eu
rodei tá então eu já adicionei aqui um http Inclusive eu vou usar uma extensão zinha aqui que eu recomendo muito nas aulas que é o rest client né que a gente consegue eh criar requisições http ó eu tenho já um usuário na minha aplicação para poder fazer uma autenticação só pra gente poder fazer um teste Isso aqui faz a requisição http como ela é tô fazendo um post para Barra Alf bar login e aqui ele me devolve um token jwt a gente vai usar isso aqui mais tarde tá mas aqui é só para mostrar que
isso aqui tá funcionando nessa aplicação aqui eu acabei dentro desses eh módulos já criando informações padrões para que a gente não tenha que ficar e criando as coisas tá então aqui em ativos ó eu tenho tenho o meu asset que tá modelado lá com o banco de dados eu tô utilizando o urm Type urm aí também são decorators né aí tô falando que ele é uma entidade que vai corresponder uma tabela aí eu tenho o id o símbolo preço aqui eu até coloquei como seria um pouco melhor né com decimal ali precisão de 10 e
duas casas decimais e o nest organiza tudo em camadas então eu tenho a camada aqui do banco de dados tem a camada de serviço porque aí ó eu pego o repositório daquela entidade aí eu posso criar pegar tudo pegar um só a partir desse repositório eu faço as minhas operações né porque aí no Controller Inclusive eu criei isso aqui com aquele resource que eu tinha mostrado antes tá vendo ó só Acesso o porque assim seria o recomendado pra gente poder criar uma boa aplicação tendo respeitando Justamente a arquitetura em camadas mvc mod vi Controller né
não colocar regra de negócio em Controller apenas se for extremamente necessário na semana que vem a gente vai usar na verdade uma steck mais diferente a gente vai usar mongus com mongo DB tá a gente vai usar uma tecnologia que muita gente se interessa né o mongo vai dar umas possibilidades bem bacana de eh se inscrever nas mudanças dos ativos aí então aqui eu tenho as operações ó Eu só não coloquei eu consigo criar os ativos Você pode até brincar por exemplo aqui se você quiser pegar todos os ativos pode fazer um http 2 p
bar bar local host na porta 3000 bar assets aí ó tem aqui o Bitcoin né tem aqui o Bitcoin então Eh aqui nesse app mod que é aquele módulo Raiz Ó olha como que ele tá eu configurei esse Type urm para poder conectar no meu my Kell local host na porta tal usuário sem root root e tá aqui todas as minhas entidades aí eu plugo o módulo de autenticação o módulo dos ativos de usuário da carteira e das orders aí eu fiz uma coisa para poder ficar fácil toda vez que o nest se recarrega que
eu faço aqui um control s para poder salvar ele vai limpar o banco de dados tá então aqui eu tenho um truncate em todas as minhas tabelas faço esse forage ke checks igual a zero para ele não ficar enchendo o saco por conta de chave estrangeira né porque a gente tem tudo que tá vermelhinho aqui são Chaves estrangeiras ó chave estrangeiras chave estrangeira chave estrangeira por exemplo para poder ficar didático aí o que eu faço eu crio um usuário que é o customer 1 @ user.com com uma senha usando aqui o BPT para poder fazer
a criptografia depois eu crio o Bitcoin lá tudo usando o próprio Type urm e aqui cria a minha carteira então toda vez que eu recarrego se eu fizer Qualquer mudança ele reseta os dados de novo tá isso aí já fica o aviso para vocês pessoal a eu não quero mostrar muitos detalhes porque a gente vai vendo a medida que a gente vai codificando até aqui Vocês entenderam a ideia entenderam o O que que a aplicação tá fazendo ela pode aceitar novas ordens que inclusive eu nem fiz o serviço a gente vai fazer junto eu não
tenho mais nada a não ser aqui o serviço de ativos que eu até deixei ele aqui n que a gente viu aqui é update find One n apenas usando o próprio é uma aplicação só para poder simular um pouquinho do que a gente vai ver lá na imersão deixa eu ver se tem mais alguma dúvida aqui sempre tive dificuldade de criar essas entidades utilizando Prisma sem que tudo fique preso no Prisma tem alguma forma interessante olha Eh assim essa questão de urm eu não não não sou defensor na verdade de nenhum tá vocês vão encontrar
lives minhas aqui utilizando Prisma ciz eu já usei de tudo aqui na verdade Type RM mongus no caso para mongo né aí não tem outra coisa que não seja melhor que isso aqui na verdade até o prisma que ajuda um pouquinho mas mongus é mais baixo nível tem o micr RM eh tudo isso depende do tipo de projeto o ele facilita bastante porque você tem lá os seus esquemas mas ele não tem suporte a por exemplo trabalhar com Deixa eu lembrar exatamente que o prisma agora de cabeça são duas coisas que são ruins trabalhar com
eles melhoraram agora na última verssão para você poder criar esquemas com bancos diferentes isso era um problema e para poder trabalhar com concorrência você tinha que fazer na mão aí bagunçava o código e tudo mais mas de forma geral também o prisma tinha um problema de mais de performance mas na verdade pessoal assim eh o RM você tem que olhar se esse urm vai ser mantido ao longo do tempo eh se ele não vai trazer problemas para para pro seu projeto mas de forma geral pode escolher qualquer um desses aí eu não sou muito defensor
de urm para mim qualquer um desde que você esteja desenvolvendo com camadas fazendo as coisas e de forma correta o RM não vai ser problema tá beleza Tá então vamos fazer o seguinte aqui agora nós vamos começar o nosso a nossa brincadeira com websockets aqui e como eu tinha falado antes né eu posso montar um servidor de web socket com socket io que é a principal Lib que é usada eu posso montar com o próprio node de forma padrão Mas a questão é que o nest ele vai usar o socket io e deixar muito mais
fácil a criação de um servidor de websocket Então a primeira coisa que a gente vai fazer aqui na nossa aplicação vai fazer o npm instal @ nestjs websockets mais esse platform socket io que também é do nest esses dois pacotes aqui vão dar suporte para que a gente possa trabalhar com websockets no nest tá beleza aí agora com esses caras prontos eh qual we socket que a gente poderia criar primeiro eu vou fazer assim ó nest generate Gateway orders tá que que esse comando vai fazer ele vai criar aqui dentro de orders um serviço chamado
de GAT o conceito de GAT é um conceito do nest que é igual a websocket tá e a gente vê aqui mais uma vez decorator né já ouv gente aqui falando que não gosta de decorator Mas enfim não tem que fazer você vai trabalhar com decorator o tempo inteiro Então essa classe tem esse web socket GAT que torna ela deixa V até explicar isso aqui de uma forma tem que isso aqui tem que ser explicado com calma você cria o servidor de websocket certo com socket io no caso o nest vai fazer ele vai varrer
toda a aplicação em busca desses web sockets GAT aonde ele encontrar ele vai pegar a classe e vai começar a pegar as coisas dentro da dessa classe para poder configurar esse servidor tá é assim que funciona então aqui eu estou dizendo né que eu estou criando um serviço pro websocket e esse subscribe message a gente chama de evento Então aqui é como se fosse uma rota lá do meu Controller eu recebo informações através desse message esse message é um nome que eu posso colocar xpto posso colocar qualquer nome que eu quiser tá beleza então eu
tenho que registrar esse Gate no meu módulo que ele tá presente né porque quando eu coloquei aqui de Gate orders como ele já viu que tem a pastinha orders ele cria dentro da própria pasta então ele é inteligente para isso então aqui ó Na verdade ele já coloca né porque ele viu que tava dentro do módulo então ele já colocou então uma vez que colocou vou rodar aqui o npm start Dev E aí nós temos aqui já a mensagem ó tá vendo ord Gate subscribed the message message né que é o evento lembra aquele conceito
de eventos você tava no começo da Live que eu falei lá atrás então prto tenho meu servidor de websocket isso fosse trabalhar com o socket io vamos pegar aqui até um exemplo básico dele de código eh exemplos exemplo de chat server eh esse nesse index aqui ó para você poder criar um servidor de websocket você teria que importar o socket io igual tá importando aqui server aí você registra esse server aí desse iio você começa a chamar uma iio use iio on iio mais um monte de outras coisas né a gente vê aqui que tem
várias linhas de código então o nest ele Abstrai essa complexidade aqui permitindo que você só se preocupe mesmo a gente tá se preocupando aqui em questões de notificar como que e as coisas das ordens de compra e venda acontecem né então se torna bem mais fácil como que a gente pode testar isso aqui e tem formas tem extensões aí do ves code mas uma extensão que é bem fácil é o próprio Postman que é conhecida também né então vamos lá eu tô aqui com post deixa eu dar mais um um zoom aqui e o Postman
de forma padrão você cria uma chamada http você tem que vir aqui em cima New e tem duas formas websocket você faz se fosse um websocket sem o socket io porque o socket io acrescenta algumas coisas ali no websocket mais algumas rotas algumas coisas assim então aqui até daria se você e soubesse como que ele trabalha por debaixo dos panos então a gente já coloca aqui soet aí vou colocar o protocolo WS 2 bar localhost na porta 3000 ele é acessível na mesma porta que a minha aplicação tá rodando então aqui eu conecto Olha só
então aqui ele está mostrando que eu tô conectado E agora eu estou pronto para poder tanto receber mensagens quanto enviar mensagens nesse processo aqui aconteceu aquilo que a gente tinha conversado antes lá do handshake né cadê esse processo aqui ó esse processo aqui de estabelecimento do websocket a gente chama de handshake por a gente faz a primeira o post internamente most fez a primeira chamada http o nest recebeu ela lá com socket ao autorizou eh devolveu a resposta aí o post me beleza posso criar então estabelece ali o TCP E aí a gente tem o
canal D Plex tá ó o Jonathan foi de ins Sonia é enfim eh são ferramentas fantásticas aí para poder trabalhar então agora como que eu envio uma mensagem para lá como que eu envio uma mensagem para lá Vou colocar aqui ó message e aqui e Hello então o post me mostra que tá vendo essa setinha para cima eu enviei um Hello através do evento message a gente não tem nenhum retorno aqui e eu não consigo ver nada né Como diria o Picapau né Não consigo ver nada porque nó não fizemos nenhum console log não fizemos
nada para poder devolver uma resposta né mas nós temos isso aqui que foi enviado tá como que a gente consegue então ver alguma coisa vamos chegar aqui e fazer tirar esse return aqui vou pegar aquele payload pronto então quando eu recarrego inclusive Deixa eu tirar esse string daqui quando eu recarrego eu perdi a minha conexão tá eu tenho que conectar de novo tá vendo que eu desconectei porque tem aquele Heart bit que fica o ping pong Então eu tenho que vir aqui Connect agora eu faço um send se eu vier no terminal agora olha só
que eu tenho aqui o meu Hello né Então esse payload é a mensagem que eu estou recebendo e aqui no caso eu posso receber um texto uma informação binária um Jon e o legal de receber um um Jon é que eu já recebo aqui um objeto JavaScript nativo né Tá então eu já vi que que eu recebo essa informação esse client é a Instância do websocket do client para cada um que tá se comunicando vamos supor que eu tenha 1000 clientes 1000 clientes conectados no meu servidor de websocket cada um deles vai ter um ID
dentro do servidor de websocket Então eu tenho uma Instância dele que inclusive eu consigo devolver uma mensagem para ele tá então esse client aqui tem informações relativas a esse essa esse cliente que enviou mensagem para mim que pode ser o Postman pode ser o o browser pode ser qualquer coisa tá Então como que eu envio uma mensagem de volta para lá eu chamo aqui client pemite E aí eu defino o evento de enviar essa mensagem Vamos colocar assim eh response e aqui recebi sua mensagem beleza então ele vai recarregar de novo aqui ó tô desconectado
conectei então aqui eu enviei a mensagem mas ainda não aparece nada para mim por eu como cliente do websocket eu preciso informar pro servidor quais os eventos que eu estou ouvindo então aqui no caso do post a gente consegue fazer isso facilmente chegando aqui em events eu adiciono o mesmo nome que eu coloquei lá response e coloco aqui Listen agora tá vendo que ele tá listen então se eu chegar aqui novamente e fizer um message ó recebi sua mensagem se eu enviar para cada h eu recebo uma nova mensagem legal isso né e eu consigo
aqui no caso do post simular a mensagem Jon binário e etc show de bola entenderam isso aqui pessoal fácil né com o socket io não é complicado de fazer isso ó tá vendo os Hells aqui mas olha só a facilidade que eu tenho com nest né É muito legal isso aí deixa eu ver dúvidas que vocês estão tendo aqui o Efraim fez uma pergunta interessante aqui ó e tem alguma desvantagem eh de performance de usar websocket http no mesmo servidor Em que momento seria interessante é essa uma pergunta interessante porque que a medida que você
tem imagina um caso desse de um home broker né que você tem um sistema enorme com milhares ou milhões de pessoas se conectando ao mesmo tempo o que vai acontecer é você fazer uma separação da sua payr do seu servidor de websockets tá vai acabar acontecendo vai ser isso porque provavelmente você vai precisar de cidades específicas para poder escalar esse web sockets né Eh por exemplo utilizando redis eh utilizando coisas como Stick session eh uma vez que você tá Você pode ter um um várias instâncias desse servidor você pode querer se conectar sempre na mesma
Instância ali aí você utilizza a sessão para poder manter a o o o stateful da conexão e não ter o risco de de você conectar num próximo servidor então acaba tendo essa separação tá eh no caso se você manter os dois você tem essa esse conflito de interesses né porque para http você tá preocupado em servir os seus clientes que tão consumindo a sua api pro socket a necessidade pode ser muito mais monstruosa do que a sua api rest eh que mais qual dúvida que eu tava aqui diog Garcia perguntou quanto P com essas Abstrações
Olha você tem uma abstração escondendo detalhes a gente sempre faz isso você tem um Framework porque você não vai criar um um Às vezes a gente utiliza até o Express para poder abstrair um pouco da web no node você acaba utilizando Framework para não ter que criar tudo do zero Então essas Abstrações elas acabam mais ajudando e se você ir conhecendo mais bem o socket io quando você precisar de mudar o comportamento dele a gente vai ver daqui a pouco o nest tem essa pegada vai vendo a Live que você vai ver que legal que
que o nest vai permitir que você faça que com socket io inclusive seria bem mais complicado eh deixa eu ver o que mais aqui o Thiago comman perguntou se relacionando o websocket com kafica faz sentido utilizar os dois numa solução eh eles não são dependentes um do outro não necessariamente você tem que ter um web com CFC mas a gente vai utilizar os dois por a gente vai ter o Home Broker vai ter a B3 que vai ser a aplicação que vai consolidar as ordens né e são duas aplicações backend se comunicando então aqui a
gente vai usar o Cica porque são seriam milhões de transações executadas por minuto né E aí oica permite que eu tenha comunicação síncrona E aí o websocket vai servir pra gente poder comunicar com o frontend que vai ser com next aí aqui ó a gente tem o websocket para que a gente tenha uma comunicação em tempo real basicamente eu tô o o esquema grosseiro da da imersão é isso mas tem doc tem mongo com Change stram tem api rest tem o go aqui né no caso da B3 go com multitrading Pô a gente tem uma
imersão muito legal né beleza pessoal Então vamos continuar aqui que eu quero fazer aqui agora eh eu quero chegar aqui no meu serviço de orders pra gente poder brincar um pouquinho melhor com esse eu vou criar aqui ó nest generate Service orders E aí eu quero criar a lógica pra gente poder ter uma nova ordem de compra e venda só pra gente poder brincar o nosso rol Play aqui ficar bacana Então vou gerar aqui um método de criação vou receber os dados de entrada a gente vai receber Qual é o ID da carteira que é
um número Qual é o ID do ativo que eu estou comprando ou estou vendendo a quantidade daquele ativo que eu já expliquei lá que é o shares e o preço é tudo aqui é um número tá então para fazer a criação preciso trabalhar com o Type urm vou criar aqui o meu Construtor já recebo aqui o repositório né vou criar aqui um Private Order repository dois pontos vai ser um repository do Type urm a gente coloca essa essa esse tipinho aqui do lado dele aí como isso aqui é uma interface eu tenho que usar um
decorator na variável como eu já falei né decorator ele pode vir de várias formas então isso aqui me dá o serviço de Order então aqui eu vou criar a minha Instância de Order que vai ser deixa eu desativar a inteligência artificial que isso aqui vai mais me atrapalhar nessa aula do que me ajudar que toda hora ela fica dando dicas eh vou pegar aqui o meu Order repository vou fazer um Create passando os dados o Create aqui ele não faz o insert no banco ele só cria a Instância né então a gente faz um Order
repository P save salvando ele no banco aí aqui eu tenho a minha Order criada que é diferente dessa dessa que eu fiz aqui porque ela vai ter o o o ID al incrementado né tá aqui a como que a gente faz com PM tem aqui o meu ID que é um generated colum fto incrementado ali ó Então eu tenho aqui ó relação com o ativo relação com a carteira Beleza então disso aqui eu vou ter a minha Order criada é aquilo que eu falei eu poderia criar um Controller e através através do http pra gente
poder criar essa Order mas aí se eu tô fazendo com http eu tenho mais latência a gente vai fazer com websocket tá então eu vou chegar aqui vou deixar esse message aqui em cima eu posso ter vários eventos vou criar um outro subscribed message Create Order e aqui eu vou colocar Create Order então recebo um client que é um n eu posso colocar aqui a a tipagem dele mas não tem necessidade e aqui o payload que é n também eu posso colocar a tipagem tá então pensando que aqui nesse payload eu vou receber essas informações
aqui eu consigo enviar um Jon pro websocket né então eu já vou colocar a tipagem aqui vai ser tudo um número né Então olha só desse orders GAT eu consigo importar o meu Order service tá vendo a minha camada de serviço não importa o modo que eu vou criar o meu a minha ordem de compra Isso aqui é uma boa separação que o nest já impõe para você porque daqui a pouco se eu quiser liberar também que essa ordem seja criada com http eu só reuso o meu serviço e muitas vezes a gente peca por
não fazer essas separações né então Eh vamos passar aqui o Order service pon Create E aí eu tenho que passar Wallet ID eu não tenho ainda a gente vai depois pegar com questão de usuário e tudo mais eh eu acho que eu tô criando aqui o ID né elae vai ser criada com ID aqui end então T forçando ali o ID Vamos criar assim agora o asset ID que aqui a gente vai pegar depois via al Vamos colocar ela Fixa aqui o asset ID vou pegar do meu payload posso até tir na verd ess Wallid
só envio as três informações passo o asset ID passo o preço e passo o shares Beleza então aqui como isso aqui é vai retornar uma promessa precis colocar um aqui a deix esqueci aqui também ó aqui eu tinha me esquecido do create bom que eu lembrei show de bola então agora vamos rodar novamente o nosso servidor websocket e a gente vai ver que ele se inscreveu ó em dois eventos ó o message o message aqui e o create Order Então agora eu venho aqui no Postman eu posso fazer um Create Order aqui vou mudar aqui
para Jon Então eu tenho que passar o asset ID que é um o price que é qualquer coisa colocar 100 e o shares aqui pode ser qualquer coisa também vou colocar 10 Então tem que ser um json válido então primeira coisa vou me conectar no servidor de websocket E aí eu faço o send ó fiz o send tudo certinho agora vamos dar uma olhada aqui como a gente não colocou nenhuma resposta a gente pode usar o docker para poder ver se tá lá no banco de dados eu vou fazer um docker compose Zec DB B
é DB ou mais k que eu coloquei Ah é DB mesmo tá inclusive aproveitando aqui a aula de docker né como a gente tem aqui o contêiner que chama DB se eu fizer esse comando aqui é Zec DB Bash eu executo o Bash dentro do contêiner faço mais Kell menos o root menos P root e show databases e os nestjs eh select asterisco from acho que aqui tá Order assim vou colocar Dessa forma não pera aí show tables como que tá ah tá ordem minúsculo tá minúsculo que orda é uma palavra reservada da do SQL
né Se eu colocar só ord ali ele ia zicar Então olha só consegui criar através de websocket né Consegui criar através desse websocket e é esse o ponto aqui no momento que a gente faz esse envio como eu já tenho uma conexão aberta o tempo de envio dessa informação paraa chegar lá no servidor e ser processada é muito menor então aqui eu consigo atender uma necessidade né de negócio que as pessoas tem que criar a ordem de negócio ali para já ser executada na hora né Se ela ficar demorando eh vários segundos ela pode perder
uma oportunidade imagina que você tá criando uma ordem ali que tem que ser executada da você viu uma oportunidade e a uma outra pessoa que conseguiu fazer na sua frente porque a rede dela tá um pouco melhor então o websocket acaba normalizando né ele diminui essa latência e permite uma comunicação muito mais rápida aí de em termos de resposta temos de resposta aqui eu posso fazer o seguinte ó eu posso devolver a Order criada poderia é tem que fazer isso aqui para forçar ele a executar eu posso devolver a ordem criada tá quando eu executo
aqui com Postman eu só envio a os dados e eu não faço o processo de acknowledgement eu não toda vez que você faz um envio de uma mensagem para alguém você pode fazer um eck ou acknowledgement que é a confirmação que aquela mensagem chegou lá na ponta então eu posso marcar esse e aqui ó aí esse return que eu estou fazendo vai ser a mensagem de volta e eu consigo pegar ela Então olha que legal agora eh deixa eu ver se ele tá tudo certinho ali aí Vamos conectar de volta dá para poder diminuir um
pouquinho vou diminuir um pouquinho que é melhor para mim aí eu faço um send aí ó essa aqui é a mensagem que foi e essa aqui é que veio que veio com ID Então esse aqui já é um objeto Deon que eu recebi como resposta eu já posso usar isso aqui que evita de eu fazer uma emissão eu poderia pegar client emite por exemplo posso criar qualquer nome né e response melhor Create Order response passando esse objeto eu posso na verdade Order created eu poderia fazer isso aqui poderia mas aí tou fazendo a a resposta
no Novo Evento já posso usar o canal de comunicação que está aberto ali que para da comunicação desse evento já dá resposta que é muito mais rápido tá beleza H vamos fazer aqui agora o seguinte deixa eu pensar eu já parto para autentificação se a gente já vai logo pros ativos se eu fizer aqui tô pensando se a gente vai para autenticação tá Eh vamos fazer o seguinte aqui agora eu tenho o meu serviço que cria as ordens e e como que um preço de um ativo ele muda né Por exemplo você tem lá o
Bitcoin que tá valendo agora olha quanto tá a cotação do Bitcoin em Reais ã deixa eu pegar aqui tá mais ou menos aí R 551.000 né R 51.000 aí eu faço uma ordem de compra ou melhor uma ordem de venda de sei lá tenho alguns bitcoins eu faço uma ordem de venda de 552 aí a tem vários cálculos enfim mas aí alguém faz uma ordem de compra de 552 também porque você tem as pessoas ofertando os valores que elas acham que elas que aquele ativo vale e o valor que as pessoas querem comprar para as
vezes se você colocou aqui um valor muito abaixo e alguém tá vendendo muito acima as pessoas vão reajustando os valores enfim mas a questão é que a partir do volume da negociação dos ativos aquele preço que foi negociado vai ser o novo preço né seria negociei aqui agora então só quero apontar aqui que eh eu uma por exemplo outro método aqui de fazer um trade né terminar a negociação certo eu não vou implementar esse trade não é intuito a gente estou explicando para poder mostrar necessidade do que eu vou fazer agora vamos simular que a
partir eu criei a ordem ela já vai ser executada então vou ter ali o novo valor que do ativo né Então como que eu poderia toda vez que eu tivesse eh a criação de uma Order eu quero notificar todo mundo que tá conectado desse novo preço entendeu a ideia então simulando que a gente tem mais coisas acontecendo aqui aí eu teria um um evento aqui no caso um evento de negócio né ou alguma coisa que atualizasse o valor do ativo como que eu poderia a partir daqui notificar todo mundo nesse momento agora que o valor
mudou eu vou duplicar isso aqui eu quero pegar o meu repositório de ativos Lá do banco de dados quero recuperar o ativo na íntegra então eu quero consultar o meu ativo asset repositório find One aqui eu passo a ID vai ser e deira asse ID então aqui eu Consultei ele e aqui agora eu quero notificar todo mundo eu poderia usar o próprio Order GAT aí que entra aqui o nest como que ele organiza melhor a nossa aplicação poderia usar o próprio Order Gate para poder fazer essa emissão Mas eu posso criar múltiplos gateways dentro do
nest então eu vou fazer aqui a geração de um GAT de GAT assets então ele tá aqui ó criou mais um novinho eu vou tirar esse subscribed message daqui que inclusive ele daria conflito por causa do outro que tá criado esse outro aqui vou tirar ele mas aqui eu vou criar um método que vai ser notify New Price Vou passar o meu ativo que eu posso enviar ele inteiro né E agora Como que eu faço para poder fazer esse envio eu preciso aqui nesse caso eu estou sendo eh ativado de dentro de outro serviço eu
não tô sendo ativado através de um evento do socket né Estou sendo provocado pelo próprio websocket então aqui para poder fazer a notificação eu tenho que acessar a Instância do servidor de websocket então aqui eu vou colocar socket é igual server e esse server é do tipo server ou melhor server não aqui é socket socket de socket aio pronto e aí eu coloco em cima dele mais um decorator como eu falei sempre decorator aqui no nest né web socket server Então nesse caso aqui desse serviço de Gate que a gente tá criando quando nest pegar
ele ele vai injetar a Instância do servidor de websocket nessa variável então aqui eu posso fazer um socket emite New Price asset esse New Price é evento que eu acabei de criar tá então esse G ele tá registrado no meu módulo aí agora eu tenho que usá-lo eu tenho que usá-lo aí que aqui vai entrando a a [Música] a Como que você vai organizar as coisas no nest né porque eu quero usar esse serviço aqui ó asset coloquei no plural né assets GAT é do tipo asset assets GAT eu só vou importar e vou rodar
a minha aplicação e Aqui nós temos acho que é na verdade é o primeiro erro né da da aula mas é um erro que tá so controle isso aqui é um erro muito categórico Olha só o que o nest tá falando aqui pra gente ele tá falando ó o nest não pode resolver as dependências do Order service ele conseguiu identificar o repositório de Order o repositório de asset mas é que tem interrogação pro assets gatting ele tá perguntando Olha esse cara é um Provedor ele faz parte do módulo o que que acontece né Eh eu
tenho dois módulos Apesar deles estarem registrados no meu módulo raiz tanto orders Gateway melhor o orders mod e o assets Mod e tudo que tá dentro do módulo acaba ficando privado então o assets Mod não autorizou que o ERS mod use o gate então que que eu vou ter que fazer aqui eu vou ter que exportar esse assets Gate vou ter que fazer isso e importar dentro do ERS modle o assets Mod tá aquele serviço do GATE só vai ser acessível no orders mod se eu importar novamente aqui o módulo mas aí que é o
problema porque no momento que eu tô fazendo esse esse rearranjo aqui dos módulos momento que eu tô fazendo esse rearranjo aqui a gente pode ter um problema para poder fazer duplicação porque o que vai acontecer aqui ó agora vai até dar certo dos logs que ele tá mostrando aqui ele até se ele se ele fizer alguma duplicidade depois a gente olha porque eh dependendo de como ele importar esse assets Gateway aqui porque a gente tá já fazendo isso no módulo paí então ele acaba pegando as coisas do GATE Apesar que o nosso Gate no momento
é depois eu vou fazer uma mudança aqui mas dá pra gente poder fazer o teste agora então no order service depois que eu Consultei o meu asset eu pego o meu asset Gate notify Price passando o ativo e aqui deixa eu passar interrogação para ele ter certeza que deu certo né Beleza então agora vamos lá eh eu tenho aqui o evento New Price vou me conectar aqui novamente agora tô fazendo Len ali do New Price eu volto para cá e vamos ver se a gente vai ter o 100 né do do ativo na verdade não
100 né eu não coloquei exatamente eu não atualizei o valor do Mas eu quero só ver a Instância do ativo mesmo ó lá eu enviei o dado aqui ele me devolveu já o evento com New Price ó o Bitcoin com o preço ali eu teria já o valor atualizado tudo isso aqui ocorre de forma assíncrona né É porque a gente vai vendo aqui um após o outro conforme el recebeu Eles foram recebidos aqui na verdade no no mesmo tempo então olha que interessante se eu tiver 1 milhão de pessoas conectadas nesse New Price à medida
que alguém fez uma Order de compra outra de venda e tudo mais eu receberia já ess essa notificação de forma espontânea em tempo real entenderam aqui a ideia pessoal Toda vez é que a gente faz alguma negociação nova eu já notifico o novo preço então posso ter múltiplos gateways agora em questão de organização o que Eu normalmente Faria É o seguinte aqui ó eh eu vou deixar comentada essa parte eu criaria aqui três métodos um forroot todos estáticos um for feature e um for GAT pronto aí aqui no forot vai ser esse módulo eu tô
criando três formas de importar ele dentro de outros módulos então aqui dentro deixa eu pegar essa parte aqui eu vou fazer um return eu coloco mod com o mesmo nome do módulo aí de importes e mantenho aqui o Type urm aí coloco os controllers os providers e não precisa desse exports tá então a mudança ó eu chego aqui nesse app mod agora aqui vai ser somente for Hot tá ó porque na aqui no módulo raiz Eu só preciso deixar disponível né que ele tenha o Controller para ele gerar a rota precisa do serviço porque o
Controller depende desse serviço e o gate até que eu não preciso do gat porque ele não tem nenhum subscribe né ele não tem aqui por exemplo ainda um um subscribe message aqui tipo xpto E aí eu teria um handle xpto aqui posso ter um outro né at que eu não precisar del aqui no for mas se ele tivesse algo desse tipo aqui então ele teria que estar aqui então ele não precisa estar aqui agora for feature eu só quero importar as regras de negócio desse módulo então eu exponho sem Controller somente o se eu quiser
usar o meu assets service eu posso agora se eu quero exportar somente se eu quero lidar apenas com Gateway aí aqui eu vou precisar do eu vou precisar do Type RM e aqui o Eu só coloco o gate aí aqui ó eu posso importar daqui de cima assets mod P for feature Então olha que interessante isso aqui eu importei um na raiz aí eu tenho um que eu posso acessar somente o asset service posso ter outros módulos aqui que não quer trabalhar com websocket nem nada eu posso chegar lá no imports né e fazer assets
mod PF feature e quando eu quero importar apenas o gatein aí eu chego e aqui faço assets mod for GAT para não ter que importar o Controller novamente aqui então um módulo ele não precisa necessariamente ter os decorators desde que você tenha métodos estáticos e Faça o retorno você tem as perspectivas então eu fiz isso aqui justamente para qual a diferença desse for GAT pro antigo é que a gente tá limando aqui o que o Controller tá Não estou colocando mais o Controller para importar apenas o que eu quero para evitar eh duplicidade ou outros
efeitos que podem acontecer tá eh deixa eu pensar aqui numa outra coisa que a gente pode fazer eu atualizar o preço do ativo Vamos trabalhar com autenticação né autenticação acho que seria um Outro fator interessante nós temos aqui na nossa api deixa eu rodar ela nós temos aqui na nossa api a possibilidade de gerar tokens jwt esses tokens jwt poderiam ser eh por exemplo se eu tivesse um H do pontos http http 2 p bar local host porta 3000 bar orders Se eu tivesse que obviamente me identificar né passaria aqui um autoriz Beer mais o
meu token jwt que aqui eu posso até usar com essa varzinha para poder pegar o valor da de cima chamada http comum seria formatar stateless toda vez que eu quero estar autenticado tenho que enviar esse Toquinho jwt Mas e o ponto do websocket né se eu deixar o websocket dessa forma por exemplo aqui no caso do Gateway qualquer pessoa ela pode se comunicar com esse servidor qualquer momento com front Change com Postman etc tá liberado Como que eu posso fazer uma autenticação disso tá aí que entra também a questão do nest dele fazer essa organização
pra gente então Eh eu vou fazer o seguinte aqui ó vou gerar um nest generate Gate al pra gente poder trabalhar com uma parte de Gate só focada em autenticação o ponto de a gente autenticar no websocket a gente tem que entender o seguinte quando eu tenho handshake na etapa que eu estabeleço a comunicação com o servidor já era se eu tiver conectado com ele não tenho que fazer então a autenticação ela fica aqui nesse processo da chamada http Inicial eu vejo se usuário tá autenticado aí sim eu crio autorizo deixar criar a conexão definitiva
então aqui eu consigo adicionar uma interface que me permite capturar quando a gente tá recebendo uma nova conexão com websocket Então vou chamar aqui o on Gate Connection essa interface vai obrigar que eu implemente aqui um Random Connection esse Random Connection ele recebe o client que tá tentando se comunicar comigo e outros argumentos relativos a essa conexão Então olha só o que a gente vai fazer numa chamada de uma API padrão a gente não tem que passar um header authorization barer com token então eu vou exigir isso aqui também então eu quero pegar o meu
token jwt de client.on handshake pon headers aqui eu não sei se tem ou não né tem que tomar cuidado Então vou colocar interrogação alation split com espaço chamando um que que eu acabei de fazer aqui ó inclusive deixa eu ver se não tem nenhum é só o o slint me pentelhando aqui esse client handshake e dá acesso a essa chamada Inicial que o que o cliente faz para poder se comunicar comigo então aqui eu tenho acesso aos dados da requisição então por isso que eu tô pegando headers aí imaginando lá que eu tenho header authorization
com o valor Beer mais o token aí Aqui eu estou separando ele no Array que vai acabar ficando assim né o split é justamente para eu ter um Array nas duas posições então eu pego a primeira com as duas interrogações que eu vou colocar aqui se headers não existir se authorization não existir então isso aqui é undefined esse cara acaba virando undefined então é uma boa uma forma segura de eu acessar essa informação então se eu não tiver o token que eu faço client.on desconect e retorno pronto aqui eu já limo o cliente eh não
tem o que ele fazer ele pode ficar tentando fazer as chamadas para mim e obviamente aqui eh poderia ter uma validação do jwt que eu não vou colocar e tudo mais né simples eu poderia até usar o al service aqui n sei se eu tenho mas daria para usar o jwt service tem a o serviço aqui da não aqui na verdade h Cadê Deixa eu ver se eu tenho é só ten um método de login mas daria para poder doal service gente fazer isso mas tem que o módulo do jwt enfim eu poderia fazer aqui
a verificação Também depois de ver se o se o tokem existir eu faço a validação e etc né que eu não isso aqui é seria um detalhe à parte mas aí que é o ponto ã uma vez que ele já passou daqui validou o token jwt ele já está iia autenticado né e a gente quer acessar essa informação por exemplo aqui no caso do Gateway da de orders para poder pegar a carteira do usuário eu pegaria carteira a partir do ID do usuário Então tem que ter essa informação acessível pros outros gateways poderem pegar a
informação do usuário Então a gente vai fazer o seguinte ó Na verdade eu tenho até que autenticar mesmo então vamos fazer assim ó tava pensando em não fazer Vamos colocar jwt service jwt service serviço aqui é já do próprio nest aí aqui eu vou colocar um trycatch eh Colocar assim payload eu recebo aqui um subject Number né subject É tá ali no payload do Token vai ser o ID do usuário então aqui eu coloco await di jwt Service e verify ayc passando o token aí eu tenho que colocar o cat com erro tá aí aqui
em cima vem oyn eu tiro isso daqui então aqui por ele tá fazendo isso aqui comigo coloquei aqui em cima try Cat ele tá Ah aqui é dois pontos deixa colocar então valido do Token se der erro vai cair aqui no CAT se der erro disconnect tá aí aqui eu vou pegar o client e fazer user igual a payload p sub essa esse user aqui é uma inform porque o JavaScript tem objetos você pode acrescentar propriedades dinâmicas né eu tô colocando essa informação que fica isso aqui fica na memória então ela vai ser acessível em
outros lugares também tá beleza Eh Então olha que interessante isso aqui eu tenho um outro Gateway que ficou responsável por fazer essa parte da autenticação Ele só tem um Random Connection ele não precisa nem ser acessível em nenhum lugar ele ele que já vai ser o o meu Guardião aqui da minha autenticação Então agora eu posso ver aqui ó se eu tentar fazer a conexão novamente Deixa eu ver se eu tô rodando a minha aplicação né não tô rodando ela pronto Se eu tentar fazer aqui a minha conexão ó tá vendo o que acontece eu
desconecto eu não consigo me comunicar sem passar o token jwt então agora eh vamos fazer aqui a geração do jwt então pensando lá no processo do front end né você teria o login do usuário e tal eh seria retornado o token jwt aí eu venho aqui em headers coloco authorization Beer mais o meu token aí ó consegui me comunicar bonitinho e agora eu posso até fazer aqui antes da gente continuar vamos antes de criar Order aqui ó e na verdade no Gateway quando eu recebo aqui ó vamos fazer um conso log de client user tá
vendo aqui ó tá de amarelinho ó um então acessar porque uma vez que eu já estou conectado já foi autenticado tem essa informação ali na memória Então agora eu posso recuperar essa informação para poder terminar o meu processo né então faria assim ó aqui antes eu teria que consultar a minha Wallet né então vou colocar aqui poderia acessar o serviço de wallets então aqui na verdade não tenho ah não criei serviço de Wallet Então eu tenho que pegar o Type urm da Wallet deixa eu ver se ele já tá aqui ele já tá aqui então
só fazer aqui o seguinte Private Wallet repository é do tipo repository passando a entidade Wallet aí agora tem que colocar aqui em cima o inject repository passando ao Wallet então aqui eu teria Wallet dis Wallet repository ponto poderia usar o find One passando um a onde e o ID da Wallet é igual verdade eu coloquei pera aí como que eu coloquei a é o user ID né user ID é igual a client pon user beleza aí aqui ó posso passar o Wallet pid eu vou colocar com para ele não chiar falar que eu não eu
posso e fazer até uma validação aqui se eu quiser né porque e o find One ele pode não retornar nada mas eu já tô considerando porque eu tenho as informações todas já previstas n poder fazer um if se não existe o All gerar erro e fazer outras coisas show de bola então e que que ele tá dando zica aqui verdade é ah esqueci do da pronto aí agora conectar de novo meu tokem jwt tá valendo né Inclusive eu nem mostrei o tokem jwt para vocês Imagino que algumas pessoas h não tenho ainda um conhecimento jwt
né mas só aproveitando a oportunidade esse token repartido em três partes ó tá vendo que no payload ele tem ali o meu subject que é o ID do usuário é o dono do Token para quem ele foi gerado então agora vamos Pass as informações vamos ver se ó lá Consegui criar novamente e agora de forma totalmente autenticada Então veja na minha aplicação eu consegui criar três gateways né ó Gateway 1 Gateway 2 e o do asset que tá aqui em cima três é um tá responsável por receber a criação das ordens compra e venda um
faz autenticação e o outro tá responsável por notificar o preço legal isso né e agora vamos fazer aqui um exemplo de frontend eu criei aqui um WS HTML que é apenas um arquinho HTML pra gente poder fazer implementação juntos de como que seria isso fazendo ali com o JavaScript do lado Fronte Então eu tenho aqui já a parte da aqui não tô usando react nem nada tá dá para fazer isso em qualquer tipo de aplicação front Change já tô pegando a parte do socket io esse socket io aqui é a parte client dele já tô
importando Ele diretamente de um CDN que você deve tomar cuidado né inclusive com o caso do socket io é que a versão do socket io server e client é bom que elas estejam na mesma Fashion ou que elas sejam idênticas tá cuidado porque por exemplo se você tá usando um socket io client 4 e o socket I server versão 3 Você pode ter problemas na hora que eles vão fazer a a comunicação com o outro tá então cuidado com isso isso é importante então aqui eu tenho apenas um título com um Create Order que a
gente vai acabar criando aqui embaixo Vou colocar aqui uma tag script vou ter uma function Create Order aqui tá então eu vou enviar uma mensagem já com uma ordem pré-definida e a gente vai recebendo as ordens e os novos preços né A ideia é justamente essa baseado no que a gente já fez para a gente ver como que funciona e eu acho que eu já criei aqui uma rota para poder mostrar esse ele apenas quando sessão WS ele mostra lá o HTML então quando eu fizer aqui um local host na porta 3000 bar WS tem
aí ó FR muito simples né pra gente poder entender como que fun do lado do cliente então agora eu vou chegar aqui primeira coisa que eu vou fazer aqui antes de fazer a criação da ordem é estabelecer a minha conexão com websocket Então vou criar aqui ó socket vai ser igual iio e vou passar o endereço do meu Serv meu servidor de websocket Então vai ser http 2 p bar bar local host na porta 3000 e agora a gente tem que lembrar que eu tenho que tá autenticado né se forse se eu não tivesse autenticado
é só isso aqui já bastaria mas agora eu vou ter que passar um segundo objeto aqui com extra headers aí eu passo o authorization e aqui eu já vou fixar um token tá eh considerando que a gente já tem aqui no Postman pegar aqui eu tem esse token aí Acho que até não coloquei data de inspiração deixa até ver se eu coloquei data de inspiração acredito que não então dá para usar esse toqu eternamente tem data de inspiração sim é aí é só gerar um novo token ali através do rest Cent enf é bem simples
então ó eu coloco aqui vou até colocar o token aqui em cima que eu acho que vai ficar melhor para vocês poderem ver aqui eu coloco a variável Zinha e aqui não fica muito grande pronto concat Nei com token Beleza então aqui eu já faço ele já faz a a conexão vamos dar uma olhada para ver se ele estabelece essa conexão então vamos abrir aqui o Dev Tools Network Vou recarregar Então olha só então tá aqui a nossa página HTML que veio lá essa aqui é a Lib da parte client né tá usando ainda versão
472 e aqui ó que tá a deixa eu mostrar Cadê o header tem a upgrade agora o ponto é achar aqui pera aí era essa que eu tava aqui né Tem alguma dessas chamadas que ela tá com upgrade questão é só achar aqui ó essa aqui ó essa chamada que tá fazendo a o upgrade tá vendo ela tá requisitando tá falando porque você pode usar isso aqui pro de várias formas com http vamos supor que você tá usando a versão do http 1.1 e você quer fazer upgrade para dois Você pode passar aqui essa informação
Então esse header serve para indicar que você quer fazer uma mudança na conexão que você tá fazendo então essa aqui estabelece as a conexão E aí aqui eu tenho as trocas de mensagem setinha subindo enviado setinha descendo que a gente tá recebendo Então eu tenho o dado o tamanho dele e o time que que são esses 1 2 5 isso aqui é aquele ping pong é o har beit funcionando para tanto servidor saber se eles estão e eh vivos né se aquela conexão ainda ela faz sentido porque se não tiver você vai acabar recebendo aqui
um erro de eh um aviso de socket desconectado disconnected web socket ou algo assim não lembro exatamente como que é então vamos fazer aqui o seguinte ó toda vez que eu clicar nesse botão eu quero cadastrar novas ordens e preços pra gente poder ver como que funciona né então [Música] vamos fazer aqui toda vez que eu clicar nesse Create Order Ele é bem parecido com o que a gente fez lá no server então vou fazer um socket emite Create Order e enviar a informação então aqui eu envio eh o asset como que a gente colocou
tudo no estilo que me case asset ID né asset ID assim então colocar aqui um Price 100 e shares e 10 aí aqui para a gente poder pegar a resposta eu recebo oa eu quero colocar a resposta eu quero empilhar aqui nessa nesse parágrafo desse response New Order New orders né eu coloco assim document get elemento by ID posso colocar eh na verdade posso usar o Car selector tanto faz né Aí eu faço um Inner text mais igual aí vamos colocar um barra n aqui para nova linha nova Order criada dois pontos aí eu coloco
um string WiFi porque vem no formato como a gente tá trabalhando com Jon né Então essa aqui é a resposta que já vem que a gente colocou aqui esse retorno da ordem criada então aqui eu já emito e para poder fazer ouvir o new Price eu faço um socket on New Price e aqui eu posso passar esse mesmo conteúdo só pra gente poder concatenar em cima então tenho o response new Price então no preço aí aqui eu passo o data Prontinho Então logo quando eu conectei eu já posso me inscrever em eventos uso o método
on para isso então sempre socket on qualquer outra coisa que você quiser e o emit serve para poder enviar as informações Então vamos ver se o nosso exemplo deu certo vou atualizar aqui tá aqui a nossa chamadinha aí ó novo preço nova ordem criada e olha só como que tá acontecendo aqui né tá vendo ó O Create Order é assim que ele envia tá vendo aqui essa mensagem esse 420 aqui tem relação com o evento né que e Nós criamos sempre esse número aqui do lado da informação ele tem relação com o evento que tá
sendo transmitido ou que tá sendo recebido então a gente enviou um e recebeu dois eventos e o ponto é justamente esse ó porque vamos duplicar isso aqui aqui eu vou limpar eu posso tirar tá vendo que de um lado eu criei a Order mas eu recebi o novo preço aqui eu não estou mexendo com a Order e eu já recebi o novo preço então se eu tiver 500 Abas aqui eu exagerei né 500 mas ó esse aqui já recebeu o último evento esse aqui tem o segundo e esse aqui tem os dois olha que interessante
isso né eu consigo propagar isso para todo mundo que está conectado isso aqui é só a pontinha do iceberg para websockets porque eu tenho como a gente viu ali por exemplo no caso da a gente viu aqui a conexão eu posso me inscrever em salas eu tenho o conceito de Rooms também esse conceito ele é facilitado pelo próprio socket io né você você tem esse conceito no web socket do node nativo diretamente não mas dá para poder criar mas aí eu já consigo fazer isso aqui facilmente também vamos supor que você esteja criando de chat
né de bate-papo então você poderia segmentar as coisas por salas né então teria a sala um a sala dois e aí quando você vai enviar as notificações você envia somente a mensagem para aquela sala que as pessoas estão inscritas então cada cliente ele fica armazenado numa sala só que a ti guarda né tem o histórico tem um mapa ali de o cliente ele tá ele pode est em uma sala com pode estar em várias enfim e também nós temos um outro recurso de namespaces para poder fazer segmentação eh namespace por exemplo poderia ter um namespace
paraas orders o namespace para ativos e aí das orders ter certas restrições em cima desse namespace já dos ativos não para ser notificado enfim né Tem como a gente fazer muitas coisas tem como plugar websocket aqui com redis se eu quiser escalab porque que que acontece se eu tiver a Instância dessa aplicação sup eu tenho Instância um e Instância do tenho dois servidores de websocket né posso ter vários a essas informações porque cada cliente tem um ID etc elas ficam na memória mas a que é o problema né porque se eh eu estava conectado aqui
estava conectado aqui eu sou o cliente xpto mas aí esse servidor ele quer notificar todos os clientes esse cara não teria acesso aos clientes desse porque eles não tão compartilhando a memória Então nesse caso todos os meus servidores duplicados minhas réplicas da minha aplicação eh estariam conectados num redizer muito utilizado né então você aguardaria as informações dos seus clientes centralizadas no redis então esses clients aqui ficariam sempre capturados né eh através de um banco de dados a gente tem um banco de dados aqui fazendo o Cash desses caras Enfim então tem como a gente fazer
muita coisa é um assunto que a gente viu que que é simples para poder fazer esses exemplos aí talem nem tão simples assim mas eh na hora que você vai trabalhar com grandes aplicações Ah o buraco vai ser bem mais embaixo Mas a questão é justamente Você tem uma aplicação como nest que você pode criar vários gateways você consegue segmentar melhor os assuntos Então você gerencia as suas coisas de asset no asset GAT suas coisas de Order em Order Gate autenticação em al GAT e você vai criando seus Gates enfim fazendo várias coisas organizando melhor
o seu código tendo aí um servidor bacana abstraindo por trás aí o próprio websocket tá eh que mais que eu poderia falar para vocês se eu criasse deixa eu tô pensando se eu vou criar mais alguma outra coisa Ah de modo geral acho que é isso pessoal já tá a gente já viu aqui um exemplo bacana né acho que tá bom vou fazer o seguinte aqui agora eh deixa eu criar um repositório Live bom que eu já tenho aqui para criar fácil Live imersão 21 nestjs web sockets aí agora acho que eu ignorei todos os
arquivos que não precisava deixa só dar uma olhada aqui Git status tal tá ok Git P Git commit Men M Git tal Orange M aí tá aqui o link do repositório vocês podem acessar depois eu coloco um readm lá mas Rode docker é isso se tiver o seu mais Kell também não tem problema nenhum ele já vai criar os dados automaticamente você vai brincando tem a página aí do WS e o Postman também para poder fazer a brincadeira pessoal todas as a todas as aulas Deixa eu beber água aqui consegui nem pronunciar todas as aulas
ficam gravadas no canal tá todas as lives desse esquenta pode ficar tranquilo agora meu povo Deixa eu voltar paraa minha tela convencional aqui eu vou abrir um espaço para vocês poderem mandar dúvidas tá estejam à vontade se eu não conseguir responder alguma coisa lá em cima então esteja em casa para poder mandar as dúvidas aí deixa eu voltar aqui pra minha tela aí aqui eu vou compartilhar de novo o código caso eu tenha que explicar mais alguma coisinha aí ó voltei meu nome ali tudo mais e enquanto vocês estão mandando dúvidas né é justamente a
gente viu um exemplo aí com autenticação umas coisas legais com websocket essa ideia de você ter esse canal bidirecional que é muito velo tem nem assim não tem nem como comparar websockets com o próprio http convencional tá tem nem como comparar isso aqui ó que é o long pulling você fica fazendo uma nova request uma nova respon de tempos em tempos tem um sistema que precisa ter respostas em tempo real então websockets é feito para isso o front tá dentro da própria aplicação então só e do próprio local host na porta 3000 vai só acessar
o aqui ó endereço ó na verdade pera aí eu não deixa eu compartilhar que agora eu tenho que mudar de tela né É só compartilhar colocar hoo na porta 3.000 que eu não tinha mudado de tela né É o que eu tava falando vou repetir novamente que não tem nem como comparar comparar isso aqui que a gente viu de web socket de uma comunicação em tempo real com uma conexão aberta de um long pulling long pulling apesar da gente ficar Faz a chamada recebe a resposta depois dá um tempo Faz a chamada recebe a resposta
gasta mais recursos tá é uma estratégia que é usada para muitos cenários mas não é eficiente para esse caso Então a gente vai usar eh web sockets só que o exemplo que a gente vai ver na aqui com home broker vai ser isso que a gente viu aqui mais de uma forma mais avançada ainda nós vamos utilizar inclusive isso aqui é muito legal vamos usar o mongo DB mais um recurso chamado de Change streams e websockets porque eh imagine esse cenário que eu tenha os ativos mudando de preço né Eh a gente cria o evento
lá da aplicação do evento dispara pro Gate Mas eu posso ter um banco de dados que me notifica quando os dados dele mudaram então o mongo tem isso aqui então nós vamos criar um Gateway ativando esse recurso do Mongo fico plugado lá no mongo quando o mongo me entregar uma nova mudança de qualquer coisa eu vou e disparo para todo mundo os dados Então vai ter isso aqui também o RAV perguntou e http P versus websockets e uma Cloud quem consum mais obviamente o servidor de websocket vai consumir mais recursos tá para você poder prover
isso aqui é num cenário como esse eh imagina que você tem que eh criar conexões persistentes manter as informações de todos os milhares de usuários que você está conectado Isso gasta muito mais recursos que o http o Billy jeans perguntou no projeto na no projeto semana da semana que vem teremos um back com nest e um com o go é isso é o nest a gente vai fazer um home broker tipo esse só que aí no caso entro mongo entre outras coisas e tudo mais né E no caso o golang vai se comportar como a
B3 né B3 é a empresa hoje que prover a bolsa de valores brasileiras Então você tem home broker eh do da XP do banco inter eh do Itaú enfim os Home Brokers todo mundo se conecta na B3 então a gente tá criando o Gol para CSA B3 justamente porque imagina tô recebendo lá um monte de eh orders e eu tenho que casar essas orders E isso tem que ser muito veloz Então a gente vai criar algo usando paralelismo em concorrência vai ser bem bacana Aí já responde a dúvida do Romério né nesse exemplo aqui agora
eu tô usando mais SQL tá nesse exemplo dessa aula aqui é só pra gente poder entender como que funciona o websockets e tudo mais então a diferença da relação pra imersão que a gente vai usar na semana que vem eh porque a gente vai usar o mongo porque no caso o mongo para esses ativos financeiros e pro caso do Home Broker aqui ele vai no dar nos D esse recursos de Change streams e armazenar esses documentos vai ser muito mais tranquilo poderia usar um relacional mas o mongo é muito subestimado às vezes ele resolve uns
problemas bem legais Então imagina que para poder acessar consultar as informações do meu home broker é muito rápido né porque o mongo sendo um banco de dados no skl que faz com que a consulta seja bem mais leve então ele vai atender esses princípios porque a maioria do tempo na verdade na aplicação do Home Broker a gente vai ter consulta estralando o tempo inteiro né criação não vai ser problema relacional traz confiabilidade que a gente tem ali aquele esquema formal como a gente tava conversando lá no começo da Live você tem as tabelas tem integridade
referencial e etc né tem muitos projetos às vezes que eh muitas pessoas usar iam relacional alguns usam no cle outros usam no seo em vez de e usam em vez de no C usa relacional né Hoje os bancos relacionais também evoluíram demais eles conseguem ter esses recursos também de Change streams enfim mas o mongo é uma ferramenta fantástica inclusive recomendo que vocês vejam uma live que a gente já fez aqui com a equipe da mongo a gente trouxe a equipe da mongo DB para poder falar sobre o banco de dados dá uma olhada também que
é mais material de estudo o Regis pergunta se tem um limite padrão é de Enviar um arquivo ou imagem essa limitação ela vai partir mais da da sua conexão né Eh vou dar um exemplo você tem uma aplicação como essa de um home broker com certeza você vai colocar quem aqui na frente T fazendo propaganda Mas é porque é dos melhores serviços existentes é um Cloud FL na frente ali como Fir e tal e Então imagina que você tá usando o websocket e tem um Cloud flare envolvido ali então a limitação não vai envolver o
protocolo vai acabar envolvendo a Cloud flare por exemplo eles limitam que cada chamada que você tenha envie no máximo 100 megas Então imagina que você tá fazendo um pad de um vídeo você tá num Netflix você vai ter que dividir em chunks né então eh não é o websocket não tem uma limitação Mas você vai ter limitações na sua infraestrutura por conta de todos os serviços que estão rodeando ela ah o que mais tem o o n vai se comunicar com os clients via websocket ex a gente vai montar exatamente esses mesmo esses mesmos princípios
que a gente tem aqui no na imersão nós vamos ter três projetos Tá três três eu vou ter uma ap rest com nest o servidor de websocket tudo dentro do mesmo projeto a aplicação em golang que se comporta lá L como a B3 e o front connex Então são três aplicações mas aí vai ter mongo DB e a par Cica e o docker organizando todo mundo o Alex Cordeiro perguntou por que o mongo DB não lida com os dados estruturados olha eh não é o mongo até tem um você consegue criar ali um um esqua
pr sua Collection né mas o algo que tá no DNA do no SQL que não significa not SQ né a gente tem que lembrar que é not only isso é bem diferente não é a ideia de você criar um esqua formal que você tenha um esquema flexível para que os eh para situações que os dados se modificam o tempo inteiro né então você não tem essa ã preocupação com a integridade referencial você vai atender a trabalhar com a desnormalização né Aí vem lá a matéria da faculdade banco de dados que a gente deixa para lá
normalização versus desnormalização versus normalização bancos de dados SQL vão eh te provocar a normalizar os dados que é evitar duplicação bancos de dados no sequel acabam te incentivando a desnormalizar porque isso vai ser eficiente na hora de recuperar essas informações né Então aí você tem que entender porque eh os bancos no sequ trabalham com desnormalização de várias formas eh alguns permitem até que você faça joins né o caso do do Mongo dá para fazer join agora um caso como o elastic search né que é um outro banco de dados nocio bem famoso e você consegue
fazer um join mas o join é mais restrito Então você tem que saber exatamente como que você vai armazenar esses dados armazenamento você dá por meio de índice no mongo já tem o a o banco com as collections enfim tem muita opção no mercado e várias formas na verdade muitas formas de resolver os problemas né eh deixa eu ver o que mais a pergunta aqui do Igor lag interessante ó se o po do websocket cair qual estratégia eh usar para recuperar a conexão perdida e continuar de onde parou websocket tem um recurso de reconnect então
quando ele se desconectou porque você vamos pô perdeu a internet sua conexão não tá funcionando ou caiu lá o pod então o websocket ele tenta fazer a conexão novamente então isso aí já resolve o problema Ou se você quiser fazer a tentativa também você pode analisar ali se tá funcionando ou não você recebe um um evento tipo você consegue fazer um um socket on disconnect você consegue fazer isso tanto do lado servidor quanto do lado do cliente mas o do lado do cliente você consegue fazer um se inscrever no disconnect né e tentar reconectar novamente
mas aí dá para passar configuração para ele poder ele mesmo retentar vamos lá vocês estão com bastante dúvida sobre outras coisas né sobre Tô vendo que o pessoal tá interessado na imersão imagina que eu tenho lá a B3 com home broker né home broker vai enviar um punhado de orders imagina que eu tenho Home Broker mas não somente esse home brok posso ter vários né vou ter ordens de compra e venda tenho milhares dessas ordens de compra e venda sendo recebidas então que que acontece aqui né são duas aplicações ende se eu libero um http
vai complicar demais né porque E você tá recebendo se a B3 recebesse essas ordens né mas tá recebendo milhões de orders via http apenas você tá trabalhando com protocolo síncrono Então vai dificultar escalonamento então aqui a gente troca de em vez da B3 ter uma IPI rest ela pode até ter mas a gente troca pelo Cica para ter uma comunicação assíncrona Veja a Live de amanhã tá a gente vai Inclusive a Live inédita né O Igor lag fala que eu não gosto de eh ter Live repetida primeira Live aqui do canal que a gente vai
falar sobre um recurso do não é um recurso a gente vai usar diretamente mas é o keico Deb primeira vez que eu vou falar dele no canal a gente tem um punhado de Live de cica é Live inédita também a gente vai apresentar essa ferramenta Amanhã a gente vai ver como que ela funciona mas aqui no caso do Cica o Home Broker publica as orders no caica e o kafica que fica responsável por entregar paraa B3 Mas se a B3 tiver fora se a B3 tiver com problemas a B3 se conecta no Cica e ela
vai consumindo Então a gente tem aqui um alguém que produz e alguém que consome e o cfca é uma ferramenta fantástica né mantida aí pela parte foundation com trp absurdo de 2 mos para produzir para lidar com milhões de mensagens então ao invés de trabalhar com protocolo síncrono a gente vai trabalhar com protocolo assíncrono Leandro perguntou se tudo vai utilizar docker sim exatamente a gente vai utilizar tudo com DOC o Renan Oliveira perguntou sobre e qual a desvantagem de utilizar esse meio de comunicação Qual o meio Renan que você tá falando sobre o Cica ou
sobre o Web socket que aí muda a resposta ã Ah o Igor L perguntou quanto de recurso de máquina essa conexão utiliza é grande significativa a ponto de me recuperar de regras de negócio para encerrá-la essa comunicação é muito leve tá comunicação com websocket é levíssimo os princípios para você poder se recuperar Imagina assim que se você se desconectou que você não fez é você deixou de receber aqueles eventos naquele intervalo de tempo que você se [Música] desconectou que mais bom pessoal acho que tá bacana né então é isso que eu tinha para mostrar para
vocês o código fonte fica aí depois eu vou pedir pro pessoal adicionar na nas descrições mas muito obrigado pela presença de vocês Lembrando que amanhã tem Live então amanhã vocês vão ver Cica né Essa ferramenta aí que muita gente tá perguntando Live inédita e vocês vão ficar de boca aberta com esse recurso chamado de k Deb o CF é uma ferramenta para poder trabalhar com streaming de dados você ela é usada muito para Bi e para poder fazer eh milhões de processamentos simultâneos né você vai recebendo as informações e vai reagindo a elas reprocess contando
publicando novos eventos e ela vai ser agregada aí no nosso projeto e esse que CIC Deb vai permitir que a gente eh pegue os tópicos né que é um conceito que tá ali dentro do Cica e eu consiga meio que criar um SQL dentro disso é muito legal essa esse cas CB então não perca a Live de amanhã às 7 horas da noite você eu que vou dar essa Live né então lembrando a gente tem a Live de quarta quinta e sexta 7 horas da noite mas a imersão mesmo começa na semana que vem não
deixa de se inscrever aí ó imersão ps.com.br Assim vocês não perdem nenhum conteúdo que vai ocorrer para poder desenvolver esse home broker tá a aplicação tá muito legal talvez Durante a semana eu mostre Eu terminei eh ela ontem inclusive vou começar a gravar deu muito trabalho para poder fazer Nossa tipo eh a parte de websocket e tal para poder dar tudo certinho ali a gente tem uma um projeto bacana demais das melhores imersões que a gente já fez então aproveite essa semana coloque as lives em dia pegue o código fonte eu tenho certeza n que
nesses 15 dias a sua cabeça pro mundo de desenvolvimento vai ser totalmente diferente né então aproveite tá todas as lives ficam disponíveis no canal is eu já tinham falado também e até não pedi no começo da Live eu às vezes eu esqueço de pedir deixa o seu like deixa eu olhar aqui Quantos likes a gente tem porque isso é importante tá a gente tem 334 likes se você ainda não se deu o seu like nos ajude porque o YouTube espalha essa Live para mais pessoas não deixe de dar esse like agora tá e deixa aí
as minhas redes sociais tá aqui ó Argentina Luiz que é o meu nick aí tem github LinkedIn Twitter e qualquer lugar que vocês quiserem só Facebook que eu não tenho usado muito mais a rede principal na verdade que eu tenho usado é o Twitter né tem todo mundo se estressando lá mas é um bom lugar para se informar mas quiser me adicionar aí no Instagram via LinkedIn quando quiser mandar mensagem estou à disposição de vocês tá Ah Deixa eu ver o que mais pode passar tá eh deixa eu ver se tem mais alguma coisa é
isso pessoal então grande abraço para todo mundo obrigado por estar aqui até agora às 9:43 né a gente já tá dando aí 2:40 de Live mas tem mais amanhã então até a próxima tchau