[Música] Olá tudo bem meu nome é Wesley e seja muito bem-vindo e muito bem-vinda a imersão full stack full pyle E hoje é o dia que você vai dar um novo passo na sua carreira e aprender como desenvolver aplicações de grande porte que rodam nas maiores empresas do mundo em como Netflix Google Instagram Mercado Livre Itaú Stone e muito mais o nosso objetivo nessa imersão é te mostrar na prática as Principais tecnologias e conceitos que você precisa dominar para se destacar em qualquer lugar que você vá não tendo apenas a possibilidade em trabalhar numa grande
empresa ganhar mais ou conseguir uma promoção mas sim também para que você consiga ter muito mais realização profissional e sem dúvidas isso faz uma baita diferença agora Deixa eu te explicar algo bem importante tá esse evento ele foi pensado para quem já tem pelo menos Aí uns 2 anos na área de tecnologia então se você ainda tá no início da sua jornada Pode ser que o conteúdo pareça um pouco denso e talvez não faça tanto sentido aí pro seu momento profissional Mas é claro você é mais do que bem-vindo aí para participar eu só preciso
te lembrar que esse conteúdo ele é mais direcionado para quem já tem uma base um pouco mais consolidada e tá buscando dar um passo ainda maior na carreira você já teve aquela sensação de Que por mais que você estude e trabalhe parece sempre que você tá correndo atrás de aprender algo novo e não consegue alcançar ou mesmo você já tendo aí uma certa experiência na área Às vezes bate aquela dúvida se realmente você entende os principais aspectos de um grande projeto Pois é eu só posso dizer que você não tá sozinho nessa e isso é
muito mais comum do que você imagina e eu posso também te dizer que eu já passei por isso diversas e diversas vezes hoje Em dia ser desenvolvedor não é mais aena saber programar o mercado já faz aí um bom tempo que Tá exigindo muito mais do que isso querendo ou não você precisa dominar microsserviços entender de comunicação entre sistemas distribuídos entender os mais diversos tipos de conceitos e protocolos como http grpc websockets amqp trabalhar com mensageria contêiners docker kubernetes Além disso é importante conhecer também diversos tipos de arquitetura e como garantir a Observabilidade dos sistemas
utilizando ferramentas de APM que coletam também aí logs tracing métricas e eventos é realmente muita coisa e é fácil sentir que nunca a gente vai saber o suficiente e é justamente por isso que a gente criou essa imersão durante uma semana você vai aprender como usar muitas dessas tecnologias e conceitos e um projeto prático que já já eu vou te explicar em mais detalhes mas antes disso eu queria te contar um pouquinho Sobre mim para que você entenda um pouquinho mais aí o meu background E como que eu posso te ajudar nessa n bom eu
já passei por diversos tipos de projetos em diversas áreas da tecnologia eu já tive uma empresa de hospedagem de sites que eu acabei vendendo eu fui Web Designer desenvolvi cms para garantir o funcionamento de grandes portais em grandes empresas Eu também trabalhei com escalabilidade de sites com grandes volumes de acesso também com computação Visual E além disso acabei desenvolvendo ferramentas de bi e também integração de sistemas em grandes empresas Além disso eu sou completamente apaixonado por programar eu trabalhei com muitas linguagens de programação desde Pascal dph PHP c+ mais Python e até go que é
uma das linguagens que eu mais utilizo no meu dia a dia em 2008 eu descobri a minha verdadeira paixão a conexão entre educação e te tecnologia foi quando eu fundei a Sofinet onde a gente ajudou mais de 300.000 pessoas a avançarem suas carreiras depois disso eu fundei a code education que foi um centro oficial de Treinamento das zend Technologies e quem é da antiga aí no mundo do PHP sabe do que eu tô falando e em 2020 eu fundei a full cycle e mais recentemente a fctc a faculdade full cych de tecnologia por conta dessas
contribuições eu fui reconhecido aí diversas vezes e recebi prêmios que são muito importantes aí Para mim eu fui nomeado duas vezes como Microsoft MVP que é most valuable professional da Microsoft Google developer experts in go docker Captain pela docker in e eu também fui reconhecido como um dos top 100 líderes na área de educação pelo fórum global de educação e aprendizagem Inclusive eu recebi esse prêmio lá em Las Vegas agora eu não tô falando isso para m gabar tá eu não acredito inclusive que alguém precisa ter aí 25 anos de Carreira para conseguir trabalhar em
grandes projetos hoje com tanta informação disponível e cursos como os da full pych é possível aprender muito mais rápido do que há 20 anos atrás e falando em Full pych Olha só isso aqui que bacana é sou desenvolvedor já há 5 anos qu para 5 anos comecei a fazer a faculdade ali no Meio do do do era tecnólogo no meio do tecnólogo eu consegui uma oportunidade numa fábrica De software em 23 veio aquele creche dos bancos norte-americanos e eu acabei indo del layoff junto com muitos outros de Foi aí que apertou Foi aí que apertou
eu pensei Car tá vou procurar outra coisa era PJ né então eu fui de 8k por mês a zero mercado começou a exigir muito muito muito mesmo começou a filtrar muita gente assim que sabia pouco que tava começando eu não tinha confiança de trabalhar fora dos projetos que eu já trabalhava parei de procurar porque eu Tava tomando muito não na cara por causa dos gaps técnicos você se sente estagnado eu não tinha confiança nenhuma no código que eu tava fazendo foi nessa época aí do layoff que eu conheci o canal do YouTube do Full cycle
né comecei a a a me apaixonar cada vez mais pela didática que o Wesley trazia eh eu falei é isso que eu quero pra minha vida eu falei cara eu quero estar junto desses caras se isso aqui que tem no YouTube for um pouquinho do que tem no Curso e o curso é esse valor tá muito barato falei pra minha esposa vamos tentar fazer esse curso F saac ver se eu deseng melhor investimento que eu fiz foi o de docker de kubernetes dominei o Solid DDD eda um monte de macete que eles passam no curso
que é muito bom com certeza me deu muito mais confiança em conv com outros D termos técnicos eu às vezes eu ficava meio perdido com algumas coisas hoje em dia eu sinto completa Confiança e se alguém me explicar alguma coisa nova eu vou entender curso full pyc entrega entrega entrega muito barato assim e é o que a faculdade deveria ser hoje eu tô muito confiante com o meu código e eu escrevo teste coisa que eu não fazia e eu perdi oportunidade por não escrever teste né eu aprendi com FS escrever TCE não só test mas
test da maneira correta Hoje eu tô trabalhando part-time para uma Empresa norte-americana e eu faço fridas às vezes muitas vezes pra Espanha A sensação que eu tenho de trabalhar assim não por ganhar em dólar nem nem em euro essas coisas mas é uma sensação de Poxa eu posso eu consigo eu devia ter conhecido o fsac há muito tempo atrás eu estaria muito agora e falando em aprender nessa imersão Vamos colocar muitos conceitos tecnologias e abordagens na prática Vamos desenvolver um projeto prático de rastreamento de veículos em tempo real envolvendo funcionalidades Como iniciar novas corridas verificar
a posição dos veículos Acompanhar a movimentação no mapa acompanhar o momento em que os veículos chegam ao destino e também calcular o valor do frete com base em diversos parâmetros para tudo isso ser possível nós vamos trabalhar com ecossistema assim super moderno utilizando aí diversas soluções no Backend nós vamos utilizar o nestjs para construir uma API altamente escalável e organizada responsável por receber as coordenadas dos veículos gerenciar os dados das corridas e também disponibilizar as informações pro frontend já no front end a gente vai contar com o nextjs react e ta ind garantindo aí uma
experiência fluída moderna responsiva e de fácil manutenção também a gente vai trabalhar com ssr ou server Side rendering para garantir Muito mais performance no carregamento das páginas explorando aí ao máximo o potencial do nextjs vamos também utilizar o Web sockets para manter uma conex contínua entre client server permitindo assim que a gente possa ver em tempo real o posicionamento dos veículos sem precisar ficar dando refresh na tela o apach cfca será o Ponto Central de comunicação assíncrona permitindo a distribuição das coordenadas em tempo real para vários Serviços gerando um fluxo constante de informações sem perda
de performance um microsserviço também vai ser desenvolv ouvido na linguagem go que vai ser responsável por simular as coordenadas dos veículos enviando tudo isso pro ap CFC além também de fazer o cálculo do frete e para garantir praticidade padronização e portabilidade no ambiente de desenvolvimento a gente vai utilizar o docker para Executar tudo isso trabalhando com contêiners em todos os Nossos microsserviços facilitando muito aí a manutenção processo de desenvolvimento até mesmo no processo de Deploy nesse projeto você vai vivenciar na prática a combinação dessas tecnologias explorar arquitetura de microsserviços lidar com mensageria e fluxo de
dados em tempo real desenvolver uma interface moderna e interativa além de aprender estratégias para criar soluções escaláveis e flexíveis esse projeto ele vai te mostrar na Prática como todas essas tecnologias e conceitos se conectam te preparando para criar soluções complexas de autodesempenho como as exigidas pelo mercado então se você quer se destacar aprender a trabalhar com sistemas complexos e ser capaz de desenvolver soluções para grandes empresas sem dúvidas o que você vai aprender nessa semana vai te ajudar bastante então agora chegou a hora de colocar a mão na massa Então bora pra tela do meu
Computador bom pessoal e agora eu quero explicar para você o nosso projeto prático onde a gente vai trabalhar durante essa semana durante essa semana toda a o luí Carlos que trabalha comigo inclusive aqui na full cycle nós vamos desenvolver então no final das contas uma plataforma de rastreamento de veículos esses veículos eles fazem entregas e a gente tem que gerenciar e conseguir ver todo esse processo então o sistema de rastreamento ele possui Obviamente o backend e o front end dele onde há essa conexão né onde o front chend a gente tem toda a interface para
fazer as verificações em tempo real e também iniciar registrar rotas para que os processos de entrega acabem acontecendo tá também ah o que que acontece nós temos um processo de cálculo de frete das viagens de acordo com a distância do trajeto tá então esse também são Pontos importantes na hora que a gente vai trabalhar tá uma outra Coisa interessante é o seguinte como nós não temos um GPS de um monte de carro andando na rua mostrando essa movimentação O que que a gente fez a gente tem um sistema né um microsserviço de simulação o que
que esse microsserviço faz ele simula cálculos de frete baseado na distância mas ele também simula a os veículos andando ou seja seja de acordo com a amostra né com o trajeto que ele vai fazer esse simulador ele vai ficar Enviando mensagens né da latitude e longitude da onde Aquele veículo está e a gente também vai fazer algumas gracinhas para que essa velocidade ela não seja tão constante para que Inclusive a gente consiga ver essa movimentação em tempo real na nossa interface tá então ao invés de gente ficar recebendo né as notificações de um GPS real
onde tem o veículo a gente tem um software que vai fazer essa simulação Beleza então como que vai ser a dinâmica De funcionamento do nosso sistema nós temos alguns casos de uso aqui que eu quero deixar claro para que você entenda como é que vai funcionar a ideia principal E daí dia após dia a gente vai fazendo essas implementações Fechou então o negócio é o seguinte primeira coisa aqui que a gente precisa é criação de novas rotas Então vamos imaginar que eu tenho a minha necessidade de eu quero criar uma rota de um ponto a
para um ponto b né de São Paulo a Florianópolis Em dois endereços Então eu preciso registrar essa rota quando eu faço o registro dessa rota eu consigo ter né o trajeto que vai ser feito com as posições né pra gente conseguir traçar no mapa e a gente também tem a distância desse trajeto também que a gente vai utilizar Legal e quando Nós criamos uma nova rota no sistema nós temos um fluxo né completo para fazer essa criação e esse fluxo ele passa por diversos sistemas Então nesse momento eu quero Explicar para vocês como que a
gente trabalha com a criação de uma nova rota Então vamos lá primeiro ponto a gente tem um front end que ele é desenvolvido em nextjs Então a gente vai ter bastante coisa moderna inclusive que vocês vão ah poder acompanhar e daí o que que acontece o nextjs né onde a gente vai lá seleciona na Interface para criar uma rota ele vai mandar essa informação para um back que é feito em nestjs que é um outro Framework Fantástico né usando jav Script typescript node para que você Ah tenha né todo esse processamento para fazer o processo
né o processamento pro processo mas o processamento Ah dessa transação de criação de uma nova rota como é que funciona nesse caso o backend recebe né tudo isso ele vai registrar a rota no banco de dados ele vai fazer uma consulta né ah no Maps para conseguir pegar ess as informações do trajeto para que a gente tenha as informações necessárias ali do trajeto mas fora isso Né o esse backend nestjs o que que ele vai fazer ele vai mandar um evento para o apach CFC se você não conhece o apach CFC ele é uma uma
ferramenta uma das mais poderosas hoje em dia para mensageria e stream de dados ou seja se você precisa fazer sistemas se comunicarem de forma assíncrona o apach Cica é é uma super ferramenta candidata para que você possa fazer isso basicamente quando um novo a uma nova rota é criada o nestjs vai publicar ou Seja vai enviar uma mensagem um evento pro apach CFC falando que uma rota foi criada e as informações daquela rota pra gente o que que vai acontecer nesse momento nós vamos ter aquele simulador que eu falei para você né esse simulador é
um software desenvolvido em golang é um microsserviço e esse microsserviço vai pegar essa informação dessa rota que foi criada e vai fazer o qu no final das contas ele vai armazenar as informações dessa rota inclusive com todos os pontos Do trajeto que vai ter que ser feito por quê Porque lá pra frente quando os veículos começarem se movimentar vai ser esse mesmo simulador que vai mandar as posições pra gente ver a os veículos andando no mapa ali em tempo real legal então esse cara aqui né ah é responsável é o fluxo pra gente criar uma
nova rota dentro do nosso sistema porém nós temos também um outro caso de uso logo após quando uma nova rota é criada tá Por quê Porque a gente Precisa fazer o cálculo do frete Então como é que funciona basicamente quando uma rota ela é criada certo essa rota é criada lá no nosso simulador o que que esse nosso simulador faz nesse momento Opa Recebi uma nova rota então eu vou registrar essa rota aqui nesse microsserviço mas já que eu tenho tenho a distância né dessa rota eu vou aplicar uma fórmula aqui e ainda vou fazer
o cálculo de quanto que vai ficar esse frete legal e o que que acontece nesse Momento uma vez que eu tenho né esse frete calculado no meu simulador eu vou pegar e vou disparar um evento pro ap Cica falando que eu tenho o valor do frete para aquela rota tá então essa que é a ideia principal e daí nesse momento o que que vai acontecer o nestjs que foi o o criador né O Agente criador da Rota vai receber essa mensagem e vai falar ah ok agora eu sei o valor do frete e ele armazena
também essa informação no banco de dados tá então funciona dessa forma o Cálculo do frete uma vez que nós Recebemos um evento para criação de uma nova rota o nosso simulador ele cria a rota internamente faz o cálculo do frete retorna esse evento pro apach CFC e o nestjs pega o valor do frete calculado o porém além do cálculo do frete a gente tem algo muito importante que é o processo de entrega como é que funciona o processo de entrega uma vez que eu tenho uma rota criada né O que que eu vou fazer eu
vou pegar ali vamos dizer Um veículo e vou falar inicio o processo de entrega para essa rota tá então como é que vai funcionar nesse caso Ah no frontend né no nextjs né na interface você vai falar olha ah iniciar uma nova entrega e daí na hora que você seleciona para iniciar uma nova entrega você vai escolher as rotas que estão cadastradas e daí a gente vai escolher a rota né que a gente selecionou e daí nesse momento essa informação é enviada para o backend com nestjs né e o nestjs Vai publicar Uma mensagem né
um evento no cafca falando olha só iniciou o processo de entrega baseado nessa rota aqui e daí o que que acontece o nosso Simulador em Go vai receber essa mensagem e vai falar ah ok é a rota número um que vocês querem eh receber maravilha então o que o que que esse simulador começa a fazer ele simplesmente pega o valor dessa rota tá e começa a disparar eventos tá para o ap cfca fazer o quê mandando as posições da onde está Basicamente a aqueles veículos Beleza então é basicamente esse tipo de coisa como é que
funciona essa simulação a gente falou olha a rota x iniciou legal então o simulador de Gol o que que ele vai fazer Opa eu sei que essa rota x essa rota número um a começou uma entrega então o simulador de Gol ele vai pegar essas informações da Latitude Longitude que a gente registrou no momento a da criação da Rota e a gente vai começar a Publicar de tempos em tempos né a a posição atual da onde tá aquele veículo de uma forma simulada obviamente né E daí quando a gente tiver essa essa informação essa informação
é recebida pelo backend que é feito em nestjs e uma vez que o backend nestjs recebe essas informações o que que acontece nós temos o frontend que recebe né A as informações de localização pra gente plotar ali no mapa o veículo andando agora o grande ponto é que isso aí tem Que acontecer em tempo real Então o que acontece o simulador que a gente utiliza a linguagem go ele fica mandando a cada um 2 segundos né a gente vai fazer um algoritmo para não ficar algo tão constante ele vai mandando a mensagem pro CFC o
KFC vai mandando a mensagem pro backend e o backend manda pro front end mas o que que acontece pro front end ser atualizado em em tempo real a gente precisa ter uma conexão né ah consolidada uma conexão aberta entre O backend e o front end porque senão a gente ia ter que ficar dando refresh na tela do front end eu preciso isso em tempo real E para isso a gente vai utilizar o websockets que no final das contas é uma tecnologia um protocolo que roda em cima do http que faz o seguinte ele abre uma
conexão TCP entre né o backend e o front end e Tod toda vez que a gente receber uma nova mensagem do apach cfca né pelo backend do nestjs o backend manda essas mensagens pro nosso Frontend e o front end vai atualizando em tempo real a posição ali do mapa Então são esses fluxos que nós vamos utilizar aí durante essa semana então dá para perceber que é um projeto muito bacana porque a gente usa diversas tecnologias né obviamente tudo isso poderia ser ter sido feito com outras linguagens com outros frameworks e tudo mais mas a gente
percebeu que go é uma linguagem muito bacana que a gente vai trabalhar com multitrading a gente vai Conseguir fazer esse simulador aí trabalhar de uma forma muito legal o Kafka é uma tecnologia assim muito forte que vale a pena você aprender o nestjs é utilizado amplamente em grandes empresas e ainda né tem toda a facilidade e todo o poder aí que a gente tem do typescript do nodejs E também o Next JS eu poderia dizer que vamos dizer assim é o Framework atualmente ali o mais popular né que utiliza react ta Wind nesse caso que
a gente tá utilizando pras Estilizações né e obviamente a gente tem aí tecnologias como websockets que nos ajudam a trabalhar com tempo real também então pessoal a nossa ideia principal é conseguir botar isso para rodar legal e a gente vai ter uma semana para fazer isso é um bucado de código que a gente vai ter que ah fazer mas assim eu tô bem empolgado para tudo isso legal então Quais são as tecnologias finalmente que a gente vai utilizar docker a gente vai utilizar docker para Tudo Ou seja você Não precisa ficar necessariamente instalando tudo na
sua máquina Então a gente vai trabalhar com isso e novamente a gente tem muitos vídeos ah sobre docker no nosso canal do YouTube então eu super recomendo se você nunca ouviu falar de docker principalmente então assista Ah porque a gente tem muito conteúdo que vai te ajudar e é uma tecnologia que se você não souber nos dias de hoje você vai ficar fora do mercado tá outra coisa a gente vai Utilizar linguagem go criada pela Google com uma alta performance uma linguagem compilada a gente vai utilizar ali o nextjs Né que é feito ah ali
com uma base bem interessante com nesse caso com react Mas também ele trabalha com vamos dizer um servidor interno dele em node também pra parte de server Side rendering e coisas desse tipo e também a gente vai utilizar o nestjs bacana além do nestjs nesse caso a gente também vai trabalhar com Websockets legal e também nós vamos trabalhar aí com o apach cfca pessoal Essa é esse é o nosso desafio é o projeto que eu quero que você fique empolgado aí para participar com a gente durante essa semana todos os dias a gente Vai disponibilizar
uma parte desse projeto para que você possa acompanhar e o você vê tudo funcionando ali no nosso último vídeo com tudo integrado fechou agora pra gente iniciar todo esse processo adivinha só você vai ah ter uma Aula fantástica com luí Carlos para iniciar tudo que a gente começou agora nessa apresentação um grande abraço e vamos nessa aí na nossa imersão salve 10 beleza Luiz Carlos na área então vamos começar a prática aqui do nosso desenvolvimento do nosso microsserviço que vai ser ali a IPI de gerenciamento de trajetos né Muito prazer eu sou ctio aqui da
full pych e também Professor Espero que você passe Um bom tempo aqui comigo pra gente poder codificar junto e elevar aí o nosso conhecimento tá então bora aqui pra gente poder entender algumas coisas do que vão ser desenvolvidas nessa aula obviamente nós vamos utilizar o nestjs como ferramenta principal Framework web para criar a nossa api Então nós vamos ter o typescript JavaScript mais o node ali como as ferramentas bas para poder criar esse microsserviço obviamente o nest como Framework web o prisma urm Como urm que vai conectar a aplicação no mong db nós vamos utilizar
esse banco justamente porque nós estamos trabalhando com essa parte dos trajetos vai ter a comunicação ali com com Google Maps então o armazenamento em documentos é muito mais flexível e também vai até permitir que a gente faça uma consulta bem mais rapidamente dessas informações Então como nós vamos ter uma API ela vai ser uma API rest nós vamos trabalhar com os pilares ali do rest e o Google Maps Api para fornecer qualquer informação referente aos trajetos determinar os trajetos conseguir pesquisar os lugares e etc Então nós vamos fazer essas etapas aqui na aula nós vamos
criar o projeto nestjs depois fazer a integração do Mongo DB com o prisma ali na aplicação E aí nós temos três rotas para que a nossa api esteja pronta primeira é o Barra Places que eu vou passar ali um lugar passo ali um text igual a Rio de Janeiro por exemplo ele vai me retornar um Place ID que é o identificador daquele lugar lá dentro do Google Mapas isso vai servir pra gente poder fazer o traçado depois o trajeto ali então com esse ID eu posso fazer depois um barra directions passando origem destino ali como
paret aí o Google a gente vai fazer essa chamada lá pro Google Mapas ele dá todo o trajeto entre esses dois pontos né então faç primeiro barra Places depois barra directions uma vez que eu Tenho essas direções eu posso cadastrar uma rota e vai ser essa rota que o motorista depois vai fazer a sua navegação então vou ter um barra HS ali eu passo as informações das direções Então tá cadastrad inha aquela rota lá no front end depois quando tiver o front end ele vai escolher aquela rota inicia então a gente consegue fazer essa simulação
e obviamente eh não vai ter um motorista na rua para poder fazer todos esses e eh esse rastreamento dos Veículos nós vamos ter que ter uma simulação para ver isso funcionando nós vamos ter também um serviço de armazenamento dos do posicionamento dos motoristas também para saber exatamente onde esses motoristas passaram tá eh Vamos falar agora sobre o nestjs nesse Framework que é muito hypado na comunidade node é o Framework mais hypado do momento Exatamente porque ele tem uma proposta diferente né Ele Trabalha com uma arquitetura modular a ideia que veio lá do Framework front end
do angular não confundi o angular com nest eles podem trabalhar em conjunto porque não trabalha do lado back eu tô do lado do Fronte né mas o nest é um Framework muito versátil porque ele já te dá uma estrutura sólida para você poder criar tanto aplicações menores quanto aplicações maiores ele faz integração com várias outras ferramentas de forma Nativa kafica RB team q vários Tipos de bancos de dados você cria um api rest cria api com o graph KL então é um Framework que a gente sempre traz aqui pro Canal porque ele é muito versátil
e é uma boa opção quando você quer criar uma ap com node ou criar um microsserviço também inclusive é interessante pensar que esse Framework foi criado em 2017 então ele é novo em relação a outros que já existe há um bom tempo né os dois criadores aí o kion mlc e o Mark pisc inclusive eh esse carinha Que o Mark pizer é faz parte lá do Core team do angular então ele que trouxe essas ideias aí da questão modular tá então a gente consegue criar aplicações web facilmente com esse cara eh e aí a gente
acaba tendo essa arquitetura aqui né uma arquitetura modular Então tudo tem que tá dentro de um módulo sempre vou ter um módulo raiz que organiza toda a minha aplicação então posso ter lá o meu App mod que vai importar o módulo de usuário que pode Ter autenticação cadastro de usuário módulo de produto que vai gerenciar os produtos estoque ou coisas assim e a parte de faturamento você cria módulos como você quiser e coloca ali coisas correlacionadas então aquilo ali uma vez que é registrado no módulo ele pode ser reusado dentro do módulo em outros módulos
também você pode até pegar esse modo de transportar reusar em uma outra aplicação pode até virar uma Lib né então o que é registrado dentro desse Módulo são os artefatos são as os os componentes do são os controllers Services Gates que a gente até vai trabalhar lá com websockets tudo fica tem que ficar registrado ali dentro do módulo para que você consiga operar na aplicação Vamos falar agora sobre ambiente que é muito importante para que você consiga replicar o que a gente tá fazendo aqui na aula na verdade a ferramenta mais primordial que você tem
que instalar na sua máquina é o docker Né porque nós vamos usar o docker aqui quase a todo momento então não interessa se você tá no Linux no Mac no Windows Prepare a instalação desse doc eu vou falar Eh da instalação daqui a pouquinho mas nós temos uma live aqui no canal que é essa aqui ó tá o endereço aonde eu tô circulado aqui inclusive até vou ativar algo para melhorar quando eu tô clicando eh você pode pegar dicas aqui de configurar um bom ambiente não e necessariamente só paraa imersão mas pro Seu trabalho paraos
seus estudos dê uma olhadinha nessa Live porque tem muita coisa bacana para todos os sistemas operacionais tá eh em questão do docker é importante que você tenha ele instalado existem eh algumas maneiras de você instalar o docker dependendo do seu sistema operacional e pro caso do Mac você vai usar o docker desktop né porque é a opção oficial que se tem para Linux você tem a opção de usar o docker desktop eu colocar o docker cli ali que É apenas a chamado de docker Engine né aí tanto faz a questão que o docker desktop é
uma interface tem interface visual ela consome um pouco mais de recursos mas é mais bacana de você mexer aí você e eh olha né isso na documenta acessa o site da doc que você consegue instalar o o cli caso você não gostar do Doc desktop agora o principal ponto aqui é o Windows tá pro Windows você precisa de ter o wsl instalado tá senão você não vai conseguir acompanhar ghar essas Aulas aqui a ferramenta principal aí no Windows aí pro caso do docker no Windows você pode usar é a mesma coisa do Linux se você
usa o docker desktop ou você instala com os comandos ali somente o cli dele isso vai de acordo com que você vê ali que tá usando a sua máquina se o DOC desktop tiver ocupando muita coisa acaba acabe instalando o cli então pro caso do wsl aí do Windows que você tem que ter um pouco mais mais de trabalho Para poder configurar tudo nós temos o melhor tutorial que você vai encontrar na internet sobre isso do wsl2 mais docker né Inclusive a gente explica aqui as duas maneiras de fazer a instalação n utilizando o docker
desktop com wsl2 onde eu tô aqui com o mouse ó e o docker Engine nativo Não tenha medo tá teste primeiro o docker desktop depois se você vê que tá utilizando muitos recursos desinstala ele coloque o nativo não tem problema Nenhum aqui tem todos os comandos enfim a questão é que você tem que ter o docker na sua máquina para essa aula nós vamos precisar inicialmente ali do node para poder só gerar o projeto do nest depois nós vamos colocar Dock não vai precisar mais então instale o node aí na sua máquina eu dou sugestão
se você quiser instalar com nvm eu tenho isso aqui na minha máquina que ele você pode instalar múltiplas versões do node é bem útil né porque o node evolui muito Rápido aí você quer ter uma versão nova AL ali para poder instalar alguma coisa rodar o seu projeto sem o DOC aí é legal porque se você instalar o node aqui você instalar apenas uma versão aí você fique fique ao seu critério de como que você vai fazer agora lembrando pro caso do Windows você vai instalar Como se você tivesse no Linux né então aqui ó
você marca Linux provavelmente se você tá usando aí o o bunto né Aí você na verdade até as as últimas Versões eles têm recomendado instalação do nvm né eu tinha atéque sido disso então aqui você já instala dessa forma pode pegar aí a versão e 21 22 que já vai suportar ali tranquilamente Então é isso que eu preciso que vocês façam inicialmente show de bola então vou chegar aqui no meu terminal Vamos trabalhar aqui com nest eu vou fazer o comando npm instal Men G @ nest GSI que vai ser o Command line do nest
que a gente Consegue gerar novas aplicações e várias coisas ali todos os artefatos que forem necessários é então esse carinha aqui vai ficar Global aí na sua máquina Então eu tenho aqui o comando nest para poder brincar né Tá vendo o tanto de coisas que eu posso fazer aqui ó application Class configuration tudo mais então vou fazer um nest New nestjs api que é a p que a gente tá construindo né Aí ele vai perguntar qual gerenciador de pacotes vou usar o próprio npm ele dá a opção Ali do pnpm também do yarne isso aqui
depois enfim quiser mudar não tem problema nenhum is é o de menos ele já criou aqui o projeto Ele criou um projeto bem simples e aí você vai aumentando conforme as suas necessidades aqui ele tá fazendo a instalação ali gerando aquela node mods que é normalmente muito grande e aí Nós já vamos ter aqui o projeto agora que ele terminou de fazer a instalação eu entro na pasta e rodo o comando npm Run Start 2 pd esse aqui é o comando para poder rodar em desenvolvimento então ele já tá funcionando aqui sempre ele tem que
estar com esses logs verdinhos para que você consiga acessar a sua aplicação né porque ele tá compilando ali o typescript se tiver qualquer erro ele vai mostrar e a sua aplicação não fica disponível Então vamos fazer aqui um local host na porta 3.000 ele mostra apenas um Hell Word muito simples isso aqui já é indicação que ele está Funcionando né então Eh depois a gente vai colocar o docker aqui que eu não vou precisar do node mais da minha máquina Então vamos fazer aqui um code ponto para começar a desenvolver o nosso projeto em questão
de extensões a gente não precisa de muita coisa eu vou falando algumas extensões que forem necessárias durante a aula mas e o que eu recomendo que vocês instalem é o prier que é uma extensão que vai Ajudar aqui o vest code alinhar o código tem aqui o comando do vest code aí qualquer arquivo ali pon typescript ele já alinha e o SL lint porque também vem no projeto então o vest cod consegue já te mostrar eh várias transgressões que você tá fazendo ali no Meio do código vamos dizer assim né Então somente essas duas que
a gente precisa aqui inicialmente então nós temos aqui a configuração do typescript que tá tudo ok o package Jon com todas as Configurações ó várias Toda vez que você vê um @ nestjs são as libs esse arquivo aqui configura Como que o nest vai se comportar perante ao projeto eu posso ter subprojetos e outras coisas assim o arquivo do prer aqui de como que ele vai fazer o alinhamento são configurações simples mas já estão aqui e o slint também slint já tem várias regrinhas aqui tá a pasta dis é onde que ele serve a aplicação
então ele compila da source onde nós desenvolvemos e fica aqui o JS Que é servido ali com node né servido com o Express inclusive o o até colocar isso aqui na tela o nest é baseado no express JS que é um dos frameworks mais antigos aí da comunidade node então ele se baseia nele mas você pode trocar para Fast fy se você quiser e habilitar mais performance na iepi também que é legal aí Tem a node mods aqui então nós desenvolvemos tudo dentro da source vamos dar uma olhadinha Deixa eu ver se eu tô rodando
aqui a Aplicação não né então enquanto eu tô desenvolvendo aqui em qualquer arquivo que eu trabalhe eu der um save Ela ali recarrega e mostra ali pra gente se eu fizer alguma coisa que tá errado aí ele vai dar um erro ali e não Vai disponibilizar mais a minha aplicação mas ele fica sempre no modo watching né Tá então a nossa aplicação começa aqui nesse main.ts esse Bootstrap ele é executado inicialmente que ele tá sendo Chamado aqui é importado esse next Factory que cria a Instância da aplicação nest baseada no módulo como eu tinha avisado
antes então tem esse App mod que organiza a minha aplicação ó o módulo ele utiliza esse decorator né O decorat é um padrão bem comum utilizado é um padrão do JavaScript né da ecm script 7 né s7 que são essas funçõe zinhas que a gente coloca esse arrobo aqui ela torna as coisas Mais elegantes é um design pattern né então estou colocando um Controller e um serviço o Controller É aquela ideia lá da arquitetura mvc ele recebe a aquisição devolve a resposta então coloco @controller para que ele seja um Controller e Registro ele aqui dessa
forma como eu não coloquei posso colocar aqui uma rota qualquer por exemplo teste aí agora Se eu tentar acessar o endereço ele vai mostrar ali um 404 então agora é barra Teste aí E se eu quiser fazer um roteamento para cada rota aqui vai vão ser as funções então tenho todos os verbos https que vão acabar ligando com os métodos então aqui eu posso colocar um eh Hello já tô dando o cilet deu aqui uma boa sugestão então agora barra test não funciona mais vai ser barra Hello então cada método que eu tenho que eu
quero expor como uma rota Eu coloco a ligação com verbo importando aqui desse njs common e Aqui nós temos um serviço sendo injetado esse App service também ele tá registrado no módulo e o NS trabalha com o conceito de contêiner de serviços né não confundir lá com contêiner de Doc que aqui a gente tá falando de programação então ele tem todos os serviços registrados ele sabe como instanciar esses serviços Então eu só preciso passar no Construtor que ele já injeta uma vez que o Controller Também tá registrado dentro do módulo né O serviço é a
camada de lógica da sua aplicação Business rules né então você coloca toda sua regra aqui de banco de dados tudo que você tem que fazer aqui ele tá só retornando o Hello w mas veja só que o serviço tem o @ injectable né Então significa que ele vai ser injetável né um serviço que pode ser usado na minha aplicação nemum lugar eu tive que fazer um New aqui né Eu tive que fazer um New app service então eh Todas essas questões do nest já ter esses arquivos né com pon mod pon Controller pon service e
trabalhar com os módulos torna a vida do desenvolvedor muito mais simples né você vai criando os seus módulos e organizando tudo tá beleza pessoal então Eh vamos começar aqui brincando com o que a gente precisa Qual que é a primeira coisa que a gente tem que fazer aqui nós temos que gerar um barra Places né toda essa parte aqui de directions e Places que vai estar conectado direto com Google Mapas eu quero colocar isso dentro do módulo né já quero usar essa ideia do módulo para isso então eu vou criar aqui um módulo utilizando o
comando nest generate mod Maps ó eu posso fazer abreviando generate pelo G apenas então ele cria esse Maps ponto mod é um modul ali que tá vazio não tem nada mas ele já atualiza o appm Então já tenho o módulo Registrado né aqui é um módulo usando o outro eu tenho meu módulo raiz utilizando Poderia chamar isso aqui de módulo filho né mas eu dentro do Maps também eu tenho imports lá então para poder usar alguma coisa de um módulo que não é Global eu tenho que importar aquele módulo importar dentro do próprio decorator Tá
beleza então aqui eu quero criar um controlador para expor aquele barra Places para mim a gente vai fazer a seguinte Eh questão vamos até pegar aqui uma extensão para nos ajudar a fazer chamadas http vou usar aqui esse rest client tá ele é muito bom uma extensão muito utilizada Então vou criar aqui um api http a gente vai fazer um get htp local host na porta 3000 Places aí vou passar aqui um como texto pode ser grande né Vamos sup aqui em Minas Gerais né se você tiver curiosidade est na cidade be tem uma avenida
no centro da cidade que Avenida Governador Valadares Colocar assim Betim número 1000 por exemplo então eu quero fazer essa chamada para ele conseguir me retornar o ID do lugar Isso aqui vai fazer com que a gente consiga pesquisar esse lugar então eu vou criar um Controller para expor essa rota então Coloco de Controller vou chamar ele de Places Se eu colocar Places dessa forma ele vai criar raiz aqui do meu projeto mas eu quero que ele crie dentro do módulo Organize dentro do módulo para ficar tudo juntinho ali então eu coloco Maps barra Places então
Esse comando é inteligente porque ele vai ver que tem um mod dentro desse dessa pasta ele vai criar o Places registrado no módulo Maps tá vendo aqui ó ele vai criar um arquivo de Testes cria o Controller e atualiza o Maps mod então Maps mod tem um Controller e o Maps mod está registrado no app mod Tá beleza então tem um arquivo aqui de teste vou deixar ele quietinho aí e aqui então tem o meu barra plac já tá na rota que eu quero então aqui eu vou criar um find Places em que eu vou
expor com verbo http get ó que eu importei ali em cima tá então nós recebemos aqui esse Parâmetro de texto né como que eu consigo pegar um Carry parameter Vou Colocar assim text é string aí eu coloco um decorator né como eu falei se acostume com esse padrão de decorator que é assim que funciona em todo o projeto Então esse Carry faz o nest me entregar esse Carry parameter e eu coloco o nome dele aqui o que é mais importante é esse text aqui esse nome aqui poderia ser xpto o que interessa é o decorator
que tá envolvendo ele então Uma vez que eu peguei isso eu vou passar para um serviço que vai ter esse processamento não vou colocar ele direto no meu Controller então vou fazer o mesmo comando aqui de Controller porém trocando por service né eu posso ter um service que chama plac service na verdade aqui no singular pronto então eu tenho aqui um meu serviço que é injectable que tá registrado no meu Maps mod então eu posso usar esse serviço aqui no meu Construtor do meu Controller como tem lá o app Controller né então vou importar ele
aqui ó ele já vai vir injetado diretamente inde dependente de qual dependência ele esteja porque o nest sabe fazer isso então A ideia é que a gente faça aqui um return this plac service pon find Places que vai ser o método lá dentro passando o texto que nós vamos gerar essa busca obviamente esse método ainda não existe então vou criar esse método aqui Places recebendo o texto e aqui que vai entrar agora integração com o Google Maps né Nós vamos ter que instalar aqui uma Lib que é o npm instal @google Maps Google traps services.js
essa aqui é a Lib que a gente faz integração do lado do backend com node Tá ok então ele fez a instalação Aqui aí para poder usar o serviço que a gente vai trabalhar do Google Maps eu poderia fazer assim um New Google Maps client Tá mas isso aqui estaria ferindo aquelas boas práticas de orientação seria melhor a gente receber via injeção de dependência ou seja receber aqui no Construtor né isso melhora Nossa testabilidade a gente tem que se preocupar com esses padrões e o próprio Framework nos ajuda com isso então eu vou criar Aqui
uma variável Google Maps Cent que vai ser do tipo Google Maps Cent e aqui eu tenho que importar ela né só que aqui acho engraçado que ele não conseguiu encontrar Exatamente porque esse nome é que ele não existe dentro da Lib Então vamos fazer assim ó @google Maps Google maps.js Na verdade o que a gente tem aqui é chamado de client Mas vai ser um nome estranho muito genérico né então Vou colocar um alas para ele tá show de bola então de onde que vai vi esse carinha aqui eu vou pegar ele mandar aqui pro
meu módulo então no meu módulo aqui na parte de providers que é onde eu registro os meus serviços eu vou criar um serviço só que do modo um pouquinho diferente vou falar assim ó eu vou prover o Google Maps client usando um valor tem várias formas de você criar um serviço então nós vamos criar aqui o Serviço assim então ele já vai deixar uma Instância do Google Maps client pronta o nosso serviço só tem que se preocupar em usar isso mais nada tá aí agora vamos fazer aqui um this Google Maps client find Places fromont
text né Fica bem parecido com o o nome que nós colocamos aí nós vamos passar aqui alguns parâmetros aí eu tenho que passar aqui na verdade a um params então vou ter o input que é o próprio texto que eu recebi Ali aí tem o input type que vai ser o Place input type text Carry que é o modo que a gente tá pesquisando né esse aqui é o valor e aqui é o modo que nós estamos pesquisando E aí ele retorna a várias coisas n eh sobre aquele lugar nós temos várias informações eh geográficas
né então eu vou pedir aqui os Fields que eu preciso que vão ser o Place ID o endereço formatado a Geometria e o nome do lugar n o nome oficial porque às vezes eu tô passando ali esse Governador Valadares aqui etc mas lá dentro do Google está cadastrado de outra forma Então essas informações aqui vão ser importantes para que a gente faça o nosso trajeto depois tá e a última informação é aqui que é aqui do Google Maps que eu tenho que fazer um cadastro lá dentro do Google Maps para para fazer isso funcionar Tá
beleza então eu vou pegar aqui o Resultado disso que ele retorna um objeto com mais coisas eu só quero os dados e o retorno os dados que é aquele objeto deira ali e aqui obviamente eu tenho A5 porque isso aqui é uma promessa Tá show de bola então npm Run start Dev aí eu posso fazer a minha consulta obviamente vai dar errado porque não vou estar autorizado né Vamos dar uma olhadinha aqui que que acabou acontecendo e por debaixo dos panos Ali quem tá fazendo a chamada lá do nest é o Axius o axius pode
ser usado do lado backand também então eu tenho aqui um código 403 que é justamente o Google me negando porque eu não passei a minha api então agora nós vamos criar a nossa nosso cadastro lá dentro do Google console então ven aqui no Google Cloud platform aí eu vou criar aqui um novo projeto Inclusive eu já tinha até um aqui quando eu estava desenvolvendo Olha a interface do projeto eu venho Aqui em no projeto vou criar uma imersão 20 aqui e aí algo que a gente tem que ficar ligado em relação a conta de faturamento
não você pode fazer os testes do Google Maps Inclusive tem uma aplicação em produção usando Eh até certo ponto de modo gratuito mas a Google pede que você tenha um cartão cadastrado para evitar abusos né vai que você tá usando ali de uma forma eh abusiva mesmo então ele te limita Ali Vai fazer uma cobrança para você então se você não tiver uma conta de faturamento recomendo que você crie um cartão virtu aqueles que não duram aí 48 horas e cadastra aqui até uma forma segura porque vai que você expõe a sua aqui que ele
vai acabar gerando outras pessoas possam utilizar de fé aí eles não vão conseguir cobrar no seu cartão né então para testes vale a pena fazer dessa forma Beleza então eu vou criar aqui o projeto E nós temos que habilitar a api do Google Mapas para Que ela possa ser utilizada Então vou selecionar aqui o projeto agora aqui na parte de api e Serviços Google tem 3 api nós vamos ativar algumas apis durante a semana mas que a gente precisa por enquanto essa api aqui de Places ó Places api Então vou selecionar ela e ativar ele
demora uns segundinhos até fazer essa Ativação e agora nós vamos ter aqui acesso à api ó Então essa aqui é a minha api ke aí ele tá marcando aqui para criar Alerta sobre orçamentos e etc e eu não quero ter nenhuma restrição para porque você pode colocar ali a restrição dos endereços que podem usar essa IPI k e eu não quero tem várias formas de fazer na verdade eu não vou fazer isso agora não preciso fazer a essa parte então eu já vou pegar a minha II Key Vou Colocar aqui a gente já fala se
é uma boa prática né Colocar essa II obviamente que não agora vamos aqui em Chaves e credenciais então tem essa minha api Key aqui né que eu posso exibir a chave mas eu quero editar essa II aqui para não ter problema na hora de fazer as coisas no nest depois a gente vai usar isso aqui também lá no Fronte então eu não quero definir nenhuma restrição e eu não quero restringir não quero restringir a Chave para nada então não tem nenhuma restrição né isso aqui abre totalmente é inseguro mas para teste local se você não
expor a sua chave tá tudo OK beleza então agora eu devo ser capaz de fazer aqui a minha chamada aí vamos fazer aqui a chamada e tá aqui então ele retorna O endereço formatado tá vendo que ele tem ali o CP né Tem mais informações eh inclusive ele colocou Santo Afonso aqui nem sabia que tem esse bairro não Era o Tá errado isso aqui mas enfim Eh aí eu tenho a geometria que tem a localização isso aqui é muito importante para as vezes posicionar ali os marcadores né essa informação aqui lá no mapa você tem
ali o o o ponto que você tem uma visão Geral do de todo o trajeto né você tem eh um South East e North West na verdade um southwest North East que são esses dois pontos ali que você consegue ter uma visão mais Ampla Ali daquele ponto tá E aqui é o play ID O que que a gente precisa para poder traçar essa que a informação principal né então show de bola agora armazenar isso aqui não é legal né a gente tem que colocar isso aqui em variável de ambiente Então nós vamos criar aqui um
ponto env eu vou até fazer aqui um ponto Envy example para já deixar não esquecer para depois eh você tem que definir essa variável zinha aqui obviamente aqui nós Vamos ter o valor dessa aqui e Claro tá Pode ficar despreocupado tô expondo a minha api aqui quando você tentar hackear ela eu já desativei Então pode tentar à vontade pra gente poder ler variáveis de ambiente aqui nós vamos usar um pacote do nes @n jsconfig que ele trabalha ali com as configurações da aplicação lê variáveis de ambiente coloca informações para poder acessar em qualquer lugar ali
do projeto né Essas credenciais qualquer Valor que eu necessite Então nós vamos fazer aqui no app mod que isso vai ficar lá na raiz eu faço aqui um config mod for Root então importei ali do pacote que eu acabei de instalar ele vai ser Global aqui tá Então essa configuração faz com que ele habilite um serviço que eu vou acessar aqui também Private config service dois pontos config service E aí eu coloco aqui config Service.get exatamente o nome da minha variável tá Não precisa desse string aqui porque a própria col Pilot colocou de forma mais
formal né então agora vamos rodar aqui novamente para ver deixa eu tirar tudo isso aqui que tá muita coisa aberta F aqui a chamada tá a da mesma forma então agora via variável de ambiente a gente não expõe coloca hardcoded né mas quando eu subisse para github Com certeza eu receberia um Alerta tá fizemos a primeira parte aqui então o Barra Places agora vem a parte do directions eu vou passar os dois Places ID aqui no Orange ID Destination ID ele vai Traçar o trajeto entre os dois lugares então nós já aprendemos como fazer isso
né então vamos lá eu quero criar aqui na parte do Maps também então V fazer n generate Controller Maps bar Directions E já vou criar o meu service também com o mesmo nome né nem sempre você tem o mesmo nome de Controller e service aqui é apenas uma coincidência tá então nós vamos ter que fazer aqui tá esse barra Direction já tá ok eu vou colocar assim get directions eu exponho com o verbo get Nós temos dois Carry parameters né então vou colocar aqui @c quero pegar o Orange ID aí aqui Orange Id e o
Destination ID até aproveitar que o Pilot me ajuda aqui porque torna mais rápido aqui então ten os dois valores eu vou acabar fazendo aqui então o uso do meu serviço então constructor Private Direction service é do tipo Direction Service show de bola então aqui nós vamos retornar um this Direction Services get Direct vou colocar o mesmo nome né não tem por não colocar então agora vamos abrir o Nosso serviço então vou ter lá também um get directions eu recebo os dois parâmetros e agora aqui vai ser um pouquinho mais complexo do que o Places né
o Places foi bem simples o que a gente vai acabar fazendo aqui vai ser usar o Google Maps vamos pegar aqui do Place service fica mais fácil eh vou copiar aqui esse Construtor passar esse Construtor para Cá eu tenho que importar eu tenho que importar aqui com ele as o bem que ele podia me ajudar né aí tiro esse Place input ali e o e o config s o v code consegue importar Beleza então o que nós vamos fazer vai ser um Google Maps client P directions aí eu vou passar aqui alguns parâmetros tá igual
aquele par lá do Places mas aqui a gente vai ter outras informações E no final das contas aqui vem muita coisa tá vem muita coisa nesse directions nós não vamos precisar de tudo que vem nós vamos precisar apenas de Vou Colocar assim o formato Dee formato deor depois vai nos ajudar a já plotar isso no frontend por isso que eu estou colocando exatamente dessa forma para que vocês entendam o que eu est fazendo então vou colocar esse request aqui então vai ter um Orange que Vai ser o objeto com as informações da origem e o
Destination Destination com as informações de destino tá E no final desse carinha aqui vou ter o modo que é justamente o porque na hora que você tá traçando as direções ali tem a se você tá dirigindo se você tá pegando transporte público ou tá fazendo uma caminhada E além disso aqui vou ter os dados coms Aqui a gente já sabe que já vem o deira como é a mesma coisa do Places vou concatenar os dados que vem ali eu tô criando esse outro formato aqui para me servir depois tá então o formato é justamente esse
eh aqui como é que eu posso fazer de organizar eu vou criar aqui em cima um request PMs que vai ser do tipo directions Request parms Justamente a tipagem aqui do nosso objeto para que a gente Passe aqui embaixo Então eu tenho a origem tenho o destino o modo vai ser o travel mode driving aqui eu emz de colocar aquele driving que até o qual pal sugeriu ali eu posso colocar dessa forma que eu tô colocando via variável aqui né E aqui que a gente sabe de onde que ela vem então eu passo esse request
paramos para cá coloco qu weight Aqui aí agora eu tenho que mudar esse Orange esse Destination aqui porque eu não passo Ele diretamente tá a gente vai fazer assim ó vou colocar um template string para poder colocar Place ID dois pontos aí vem o valor que a gente tá colocando tá então a mesma coisa aqui pro de baixo então Destination ID aí agora nesse request aqui eu já Consigo preencher algumas coisas então eu tenho o Orange eu vou ter o Place ID que vai ser justamente o request Orange então tô passo ele lá pro Google
Maps para ele me dar os dados mas eu estou passando ele aqui também aí eu vou ter o location com latitude e longitude e o lng aí eu replico essa mesma história aqui pro Destination e esse mode aqui é o mesmo Mode aqui de cima Então é só fazer um request mode Na verdade eu falei até que a gente não ia precisar de todos os dados né eu tô concatenando todas as informações eu preciso de todos os dados a questão é o formato que não só os dados das direções que eu da direção que eu
preciso que ele vai retornar Inclusive eu tenho esse directions response aqui mas eu preciso desse request depois que ele vai me ajudar lá no frontend tá Para que Você entenda a questão Então já estou deixando o objeto preparado para que a gente use ele e não tem que ficar faz fazendo nenhuma transformação lá no front end Isso aqui vai ser armazenado inclusive no nosso banco de dados né A gente vai ver aqui o que que vai ter além do request e vai vir o request também então as informações aqui de latitude e longitude a gente
vai preencher assim ó data ponto routes na posição zero pon legs na posição zero Start location P latitude aí a longitude a mesma coisa só muda o lng já aqui pro destino vai ser end location para Latitude Longitude tá então fiz ele bem calmamente para que você entenda que que nós estamos fazendo aqui então show de bola agora vamos fazer aqui tô com a minha api rodando não n então npm start Dev inclusive o nest vai mostrando todas as rotas que eu tenho agora eu tenho a rota Né de barra directions tenho barra Places e
aquele Hello que eu tinha criado Então vou criar aqui um get http 2 local host na porta 3000 bar directions então tenho que passar o Orange id e tem que passar o Destination ID são essas duas informações tá aqui para ficar mais fácil nesse Rash client eu posso colocar aqui hashtags e eu vou colocar uma variavel Zinha para não ficar muito grande isso Aqui né então vou criar assim ó e orange ID aí nós colocamos um valor aqui e aí vem o Destination ID tá só lembrar de fazer as três hashtags para que a requisição
não V errada então aqui eu fiz a chamada Então esse aqui é o meu ID de origem coloco ele aqui aí agora vamos colocar fazer uma outra chamada aqui para belorizonte Avenida Amazonas Avenida Amazonas Bel Horizonte ou mais famoso Aqui BH né Não sei se você conhece por esse t tá Avenida da amazona centro agora pegou o centro ali né Tá certinho então tá aqui o play ID show de bola Então agora eu posso passar aqui o Orange ID bom dar um espacinho pod ficar um pouco melhor e aqui o Destination ID né fica porque
senão ia ficar muito grande essa chamada inclusive o Destination aí De de Betin é bem maior né ó ó o tamanho Então vamos lá vou fazer a minha aqui tá errado na verdade eu tenho que colocar interrogação aí tem o i aqui beleza na hora que eu fizer a chamada ele vai dar um erro também né Mesmo que eu tô passando ali aqui de forma correta essa API de directions é uma outra api que eu tenho que habilitar então venho aqui em API serviços busco por acho que ele tem a busca dele aqui Eh directions
api eu vou ativar a p de direções ó direções entre em múltiplos múltiplas localizações bola agora voltando para cá vamos fazer a nossa chamada aí ó temos os nossos pontos agora então ele Retorna ali um gel cod Way points Então logo de cara aqui ó tem os dois Places ids né E aqui o tipo As duas são ruas eh ruas comuns eu posso ter Outros tipos de e localização em bounds eu tenho os limites ali que eu consigo ver a toda a área envolvendo os dois pontos uma boa visão e aqui na parte de legs
e eu tenho a distância entre os dois pontos né 50 39 km 51 minutos de duração em média aí tem o start address address e aqui vem todos os passos ó Então eu tenho que tal latitude de longitude e etc dependendo do caminho Porque acaba sendo tem muita coisa entre Betim e Belo Horizonte então ó é um objeto bem grande então nós concatenam com o request né deixamos aqui já bonitinho com esse request porque esse request depois na hora que a gente for plotar lá no mapa do Google Maps ele vai necessitar desse request ele
necessita desses outras informações aqui mas o request também então é por isso que a gente tá pegando todas as informações e fazendo essa nação Então pronto né tá Fazendo sempre o total sentido que a gente tá fazendo aqui inclusive e onde que a gente vai usar esses dois endereços lá no frontend vai ter lá dois campinhos pra gente poder buscar origem destino e depois vai ter o traçado né vai mostrar antes de você cadastrar a rota você vê ali Todo traçado beleza Tá ok então depois você vai lá e cadastra que é o que a
gente vai fazer agora né Beleza então chegamos a hora do cadastro de rotas tá a gente viu aqui como criar Eh a gente viu como criar as coisas com o nest generate e foi mais fácil fazer dessa forma porque a gente precisava ali de um controler com endereço né mas às vezes tem serviços que você tá ou recursos que você quer habilitar ali com rest que vão ser um crude completo Então imagina né Ficar criando o módulo e com controlador com pegar pegar um cadastrar atualizar excluir isso dá um pouquinho de trabalho né o nest
consegue Melhorar esse nosso trabalho através do comando de resource então eu vou usar ele para poder criar o routes então coloco aqui o nome do meu recurso que é o recurso rest que eu já estou habilitando né Apesar dele habilitar outros modos a gente trabalhar com esse recurso que eu tô expondo vou deixar tinha marcado o rus api quero que ele crie todos os entry points não que a gente vai fazer exclusão de Rota ou algo do tipo mas é Para poder mostrar versatilidade mesmo do nest Então olha que legal esse comando gera um monte
de coisas então nós temos uma entidade que você pode mapear lá as coisas do seu banco o Controller já com a criação ó com verbo post então ele vai usar as boas práticas ali de recurso com os verbos pegar todos pegar com o ID isso aqui é um parâmetro de Rota né então se eu passar route bar ID aqui para poder pegar o de atualizar ele usa o verbo Pet E o delete tudo bonitinho então ele cria um módulo coloca um Controller coloca um serviço e aqui dentro do serviço obviamente ele não vai implementar para
você Você vai chegar com sua lógica Mas já tem todos os métodos disponíveis né então isso aqui é muito legal além de cres dto aqui né um dto é um data transfer Object que é um objeto de transferência de dados que é um conceito que a gente Pega ali um objeto eh simples né que vai a pena servir para poder transportar dados entre as camadas da nossa aplicação porque o Controller ele acaba recebendo esse dto que é o body ali da request né Mas a questão é que eu posso validar quando eu coloco esse B
aqui por exemplo posso criar regras de validação para evitar que alguma informação eh Passe aqui sem estar válida né se o campo ali tá presente tal Campo tá presente enfim tem como a gente fazer Tudo isso aqui bem fácil com nest tá nós não vamos implementar esse clude completo A ideia não é essa e também você vai conseguir fazer isso apenas com o conhecimento que a gente vai eh mostrar aqui durante os próximos minutos mas o que eu quero focar é exatamente aqui na criação da Rota né Nós vamos precisar aqui da seguintes informações já
que eu tenho esse dto então eu quero colocar aqui o nome da minha rota O Source ID que vai ser lá aquela origem que eu tô chamando de source e o Destination ID tá então coloco dessa forma aqui então as informações vão vir para dentro aqui do Serv passadas ali pelo Controller e a gente vai fazer a nossa lógica n mas para começar a brincar com isso agora obviamente nós vamos ter que trabalhar com banco de dados E aí nós vamos usar aqui o e o prisma Então chegou a hora dessa partezinha aqui Né fazer
integração do Mongo com o prisma Então vamos lá pessoal primeira coisa vamos colocar aqui o prisma vou instalar o pacote do Prisma que a gente precisa para trabalhar Prisma client beleza e agora eu vou criar um módulo para poder organizar a conexão ali com Prisma tudo bonitinho Então vou criar o módulo do Prisma esse vai ser reusado pela minha aplicação Então vou criar o Serviço do Prisma que vai prover a minha conexão aqui no caso eu não preciso colocar posso colocar Prisma barra Prisma como a gente tinha feito antes mas como ele tem o mesmo
nome da pasta n já vai entender e colocar ele dentro da pasta Prisma ele registra aqui no módulo também show de bola então agora nós vamos chegar aqui nesse arquinho vou fazer um extend Prisma Cent do pacote que nós instalamos eu vou implementar uma Interface aqui do nest chamada mod init vou explicar que que significa isso que a gente fazendo mod euo quando iniciar né Por exemplo rodel e o start Dev que o prisma já conecte lá no mongo para mim então o nest provê várias interfaces que você pode passar nos seus serviços Isso aqui
vai ser como se fosse um um listener de um evento né um ouvinte quando esse módulo iniciar esse método aqui é chamado então Eu faço um await this Connect não tô estendendo ali do serviço do Prisma Então já fico conectado no banco show de bola então eu tenho esse módulo aqui bonitinho se eu quiser usar aqui no rout vai ser o único módulo que eu vou usar banco de dados né eu teria que importar ele aqui né então tenho que importar o prisma mod Vamos colocar aqui Prisma service Prisma Service beleza e agora vamos rodar
o mpm Run start Dev aí ele vai começar a chiar aqui falando que o prisma não está inicializado ainda né porque não tenho banco de dados não tenho nada então nós vamos fazer o comando ó npx que é um irmãozinho do npm porém ele não instala nada local n ele só pega ali o executável que você quer fazer de alguma Lib executa Então vou usar o npx prisma init para ele iniciar a configuração do Prisma aqui no meu projeto a ele vai pedir se eu quero instalar ali última versão Ok então ele vai criar essa
pasta prisma com esse arquiv esima pon Prisma que é aqui que a gente modela Como que o prisma vai se comunicar lá com banco de dados eu coloco todas as tabelas no caso as collections do Mongo né que eu não tem tabelas no mong db e dentro do ponto env na verdade se eu não tivesse ele iria criar ele cria ali a string de conexão com o meu banco de dados que Aqui ele coloca por padrão Aí o postgress mas a gente vai mudar para mong DB né então agora eu posso rodar novamente aqui o
meu comando E aí Eu precisaria fazer aqui o prisma generate é eu tenho que fazer aqui agora a inserção do banco de dados nós vamos rodar o banco com docker então aqui o nosso primeiro contato com o docker tá vou criar aqui um serviço para o meu banco de dados isso Aqui eu vou copiar pessoal porque o mongo né Tem imagem do Mongo com Dock que eu consigo configurar facilmente mas o prisma ele vai ter uma necessidade específica porque o mongo a gente consegue usar ele no modo chamado de single node né Sem réplicas ali
eh que não é um modo que vai garantir eh consistência grande consistência em falhas eu posso usar o mongo dessa forma mas eu posso usar o o mongo multin M multin node E aí eu tenho Os o master e as slaves né ou as réplicas o prisma exige que a gente trabalhe nesse modo mas obviamente eu não preciso rodar várias instâncias do Mongo mas eu preciso de ter o mongo rodando no modo réplica porque senão ele vai chiar com a gente então por isso que eu tô colocando essa configuração aqui ó eu vou puxar o
mongo de um docker file específico vou criar aqui um ponto doc depois vem o meu Criar a pastinha mongo mong DB que tá ali né e o docker file docker File tá nós vamos usar das últimas versões ali do mongo Mongo 8 mas o mongo para ativar o modo réplica a gente tem que fazer algumas configurações tá então esse comando aqui ele tá fazendo algumas algumas execuções iniciais ali no mongo para poder ativar esse modo ica ali tá mas o que importa aqui pra gente é que para poder iniciar essa Instância do Mongo eu preciso
definir essas duas Variáveis de ambiente que vai definir o usuário e senha do rot e a porta que vai est exposta aqui vai ser a 27 Na verdade essa porta ela vai ser exposta só pra gente poder brincar aqui com o m vamos rodar ele aqui depois a gente vai rodar tudo com docker né Não precisava nem Expor a porta porque tudo tá dentro do contêiner ali ele consegue enxergar Só se eu rodar minha aplicação aqui na minha máquina e o mongo estando dentro do contêiner que Eu tenho que expor Então vamos rodar aqui ó
ele vai subir aqui o meu banco de dados ó aí se você quiser brincar com a administração do Mongo né mais facilmente você pode instalar a extensão inclusive até falar duas coisas primeiro e tem uma extensão do Prisma que eu até esqueci de falar Prisma aqui ó ela aí mostra um sintax Highlight nesse Arquivo do esima por isso que mostrou tudo bonitinho né ele te dá Auto completar tem Model aqui os campos que você vai colocando a gente vai ver isso daqui a pouco e a extensão do Mongo para você poder brincar o próprio vscode
já tem a extensão do Mongo inclusive oficial da mongo DB tá então a gente pode conectar aqui com Mongo e eu já tenho uma conexão aqui mas vamos criar uma do zero remove remove Connection adicionar conexão quero conectar com a string aqui de conexão então vai ser coloco assim ó mong DB 2ro 2ot que é usuário e senha né @localhost na porta 27017 aí eu coloco o banco de dados né que eu quero cá que vai ser o nest interrogação al sce igual admin que é o banco de dados que ele vai se Autenticar lá
para poder buscar o usuário aí ó Consegui conectar aqui então Ten o banco de dados aqui admin e aqui eu tenho todas as minhas collections aqui é os usuários né eu consigo ver os documentos ó tá vendo usuário é o root Que Nós criamos enfim o nest ainda não vai aparecer aqui até que eu coloque alguma coisa dentro do banco de dados né mas aqui serve pra gente poder brincar eu tenho usado bastante essa extensão antes eu até usava aqui Uma outra ferramenta com contê isso que acaba sendo mais prático né Beleza então uma vez
que eu fiz isso aqui eh eu poderia continuar rodando a minha aplicação na minha máquina e o contêiner com o mongo a gente já porque ess essa extensão aqui ela tá rodando na minha máquina da mesma forma mas eu já quero colocar um docker file aqui pra nossa aplicação até para ficar melhor então já vou criar aqui um docker file aí a gente vai Habilitar pegar aqui uma imagem deixa eu ver uma imagem que eu já tenha eu posso fazer aqui o comando at é bom que vocês vão vendo isso e docker image LS grap
node que eu pego tudo que eu ten de node eu tenho aqui a imagem pode ser até para não pegar essa última 23 aqui V pegar 22.8 tá então aqui eu vou pegar vou colocar usuário node como padrão diretório de trabalho é onde eu vou trabalhar lá dentro do coner bar Node bar app essa imagem do node ela já vem com usuário dentro node então eu tenho bar home e bar node se tivesse com xpto se tivesse um usuário xpto vindo aqui eu poderia colocar xpto Então esse usuário node é um usuário não root que
é bem recomendado pra gente poder trabalhar nos nossos desenvolvimentos né evite trabalhar com usuário root é uma dica boa para você poder aprender a trabalhar com Dock aí eu só preciso aqui na verdade eh já tenho usuário node essa Pastinha aqui eu vou colocar só o Command que é para eu não essa aqui é uma versão muito simples para desenvolvimento vou colocar o comando Tail menos f bar é um comando apenas que vai ler o dispositivo nulo do Linux indefinidamente o comando ta é um comando para Ler arquivos a o Men F lê de forma
ele faz o follow né ele fica lendo alguma coisa infinita e o Dispositivo nulo do Linux que é o nada então ele manté nosser de pé aí eu posso fazer aqui o que vai ser o build ponto né porque esse build aqui pegou da pasta mongod DB que tá ali no pon doc já esse docker file da raiz É só colocar ponto que ele vai conseguir pegar e aqui eu tenho que expor a porta 3.000 na minha máquina batendo a 3.000 de contêiner poderia ser qualquer porta na nossa máquina mas tem que ser lá 3000
de contêiner e eu tenho Que colocar aqui também o volume né porque eu vou sincronizar tudo que eu tô fazendo na minha máquina dois pontos em barra home bar barra app show de bola então agora vou parar aqui meu banco de dados quando eu rodar o docker compose Up ele vai subir os dois coners para mim então agora eu posso fazer um docker compos Zec app B que eu entro lá no B do Meu Container e estou lá com todos os meus arquivos então eu vou rodar tudo a partir de Agora aqui tá se eu
faço um install se eu faço qualquer coisa então agora agora quando eu quiser fazer um npm Run start Dev eu faço aqui aí ele tá pedindo agora para poder rodar Esse bendito do Prisma generate aqui então a gente vai fazer conforme ele quer vamos aguardar beleza né e ele tá até falando né não tem nenhum modelo ali não tem nenhuma tabela né você tem que criar alguma coisa e tal só quero forçar O Run start Dev para ele mostrar um erro aqui eh Na verdade ele não iniciou nada né tá vamos fazer aqui pelo menos
Então eu queria que ele forçasse um erro vou ter que acrescentar alguma coisa para ele poder brincar vamos primeiro mudar a nossa conexão aqui com o banco então a gente já sabe como é que é mongo DB dois pontos barra bar root @ aqui vai ser DB tá porque a gente tá dentro da rede do Doc então eu Consigo achar o banco de dados não local host mas DB local host não sai do próprio coner muito cuidado com isso aí aqui eu coloco a porta 27017 e Aqui o banco de dados vai ser o nest
tá E aqui eu posso tirar essas informações Beleza acho que até aqui agora ele vai eu tenho que mudar aqui longo também não tinha mudado vou rodar o prisma generate novamente tá É ele dá erro ali eu tenho que acabar habilitando aqui à Na verdade eu até esqueci de fazer duas coisas isso você tem que ter na sua máquina se você tiver no bunto aí e no Mac Provavelmente você já fez mas eh veja se você tem essas duas dependências tá a gente tem que fazer aqui um Run antes e APT update e um install
ali na já vai est na imagem né do Open SSL porque o prisma vai precisar disso para se comunicar e o proc PS porque toda vez que o aqui dentro do contêiner que a gente fizer um PM start Dev e eu faço a modificação no Arquivo ele mata o processo inicia um outro dispor o servidor atualizado com código que a gente fez a mudança Então esse PS aqui é um executável do Linux que a gente consegue gerenciar os processos n então se ele não tiver isso quando ele for fazer o Reload el D erro então
vamos fazer aqui o seguinte Mat tudo docker up tem que fazer com menos Menos Build para que Force tá vendo ele vai instalar os dois pacotes ali fazer todo processo de novo Agora eu entro aqui e faço npx Prisma generate para ver se ele não vai dar o erro mais lá do Open SSL ele não deu erro mais ó mas ele deu o erro ali justamente porque eu não tenho os modes Beleza então tem que adicionar um Model aqui que no caso vai ser a tabela ou a Collection que é o mesmo conceito fazendo a
comparação a Ali com o mongo tá então é até mesmo para que a gente não digite linha por linha eu vou colocar aqui o route que nós vamos precisar que é justamente isso aqui ó Então dentro de uma rota eu vou ter o identificador dela inclusive lá dentro do Mongo quando eu tenho uma um documento cadastrado dentro de uma coleção o ID ele fica com esse und ID então tô fazendo mapeamento para que a a gente consiga acessar ele ali no quando recuperar com Prisma não dessa forma aqui né mas ponto ID vai ficar melhor
então tenho o nome da Rota a informação dos dois lugares a distância a duração da Rota as direções que vai ser aquele objeto grandão a data de criação e data de atualização quando a gente precisar atualizar aí esses dois Places ali vão ser apenas um tipo N que ele vai ser um objeto que dentro do documento eu posso armazenar de forma mais complexa Né então eu vou armazenar o nome e location que vai ser a coordenada com latitude e longitude então É como se eu tivesse um objeto aqui né com o nome aí eu tenho
o location aqui com as duas informações Tá show de bola então agora vamos fazer aqui um prisma generate comando deu certo ele falou que que gerou as tipagens eu vou explicar como que ele funciona afinal das contas mas eu quero forçar O bendito do erro que eu Já tava esperando aqui pronto ele deu um erro aqui que Era exatamente isso que eu queria mas vamos voltar aqui para esse esquema entender como que o prisma trabalha com essa organização do banco de dados então aqui a gente monta todo o mapa o mapeamento para ele entender como
que ele vai manipular o banco de dados ele suporta vários bancos a gente consegue trabalhar com todos esses bancos aí os bancos mais famosos estão aqui se não tiverem aqui Tem outros drivers que você pode adicionar ele acaba gerando uma tipagem para todos esses mods que vão representar as tabelas né os types não são mod são tipos personalizados que foram criados né mas para bancos adicionais quando você gera esse generate na verdade não generate mas você pode fazer um migrate Dev tem um outro comando esse caso não vale pro um banco de dados no sequel
porque e a Gente não tem aquele esquema formal que eu tenho que fazer um Create table Mas se você tivesse um pogas ell por exemplo você tinha que rodar Esse comando aqui aí na pastinha do Prisma ele iria gerar uma migração que representa ali a o esquema que ele tem que executar no banco de dados né você vai versionando o banco o generate serve apenas para ele poder criar tipagem então a gente não tem que criar por exemplo uma Entidade de rotas porque ele já faz isso pra gente baseado neste exemplo então por exemplo esse
route aqui eu não preciso a gente já vai ver aqui que nós vamos ter um Prisma service ponto se ele pegou certinho aqui a gente Estendeu né do Prisma client eh tá certinho às vezes ele não atualizou e o route vamos fazer aqui o seguinte deixa eu fechar o meu vs code eu vou abrir Novamente esse aqui às vezes acontece do vc não indexar e que tem uma coisa que eu fiz deixa eu até pegar no meu docker aqui eu continuo rodando ainda eu vou só parar o meu contêiner aqui eu posso fazer né eu
fiz com docker desktop inclusive vou até mostrar ele aqui na tela eu estou Parando aqui o meu contêiner com esse Stop né mas eu posso rodar um Stop também dessa forma Então vou rodar ele Novamente aqui para ele subir tudo apenas porque eu fechei o vest code tava rodando ali com o terminal né vamos ver agora se ele agora sim então tem esse out que eu posso fazer todas as operações Então posso criar posso atualizar excluir enfim eu não não tem que criar o modo ele já cria a tipagem é um modo diferente porque normalmente
um RM você tem que fazer o mapeamento você mesmo Apesar que a gente fez aqui mas não na linguagem que a gente está trabalhando então a gente vai modelando tudo e aí sempre quando você tem esse Model que você coloca ali o nome da que vai representar a tabela no caso vai ser a coleção você determina os campos e é a tipagem do campo em si nós temos vários tipos que vão corresponder ele vai traduzir ele com tipo do banco de dados correspondente então no caso por exemplo de um uma distância ali duração que vai
Envolver um número com caso decimal tem o float o json né que vai ser um objeto complexo de armazenamento paraas datas nós temos essas diretivas que você coloca depois ali da tipagem do campo que elas têm um efeito por exemplo aqui no caso do id eu tô falando que é uma chave primária e ela vai ser autogerada a partir de um Object ID que é um um dado nativo do Mongo paraa data de criação ele já consegue fazer ali esse default Now significa que toda vez que Cadastrar ele já vai pegar a data corrente e
quando o registro for atualizado ele já vai jogar aqui no update Então esse carinha aqui faz pegar a data quando o registro tá atualizado Então você vai fazendo o seu moddel dessa forma Beleza então uma vez que eu fiz isso aqui agora fica fácil pra gente poder fazer o nosso cadastro né então eh a primeira coisa que eu tenho que fazer aqui na verdade é resolver aquele n vamos fazer aqui Um docker compos vamos voltar para lá eu vou executar aquele start Dev né aqui ele tá falando que o prisma service precisa ser um provider
el tá perguntando ele tá fazendo algumas perguntas aqui o que que tá acontecendo é o seguinte nós temos ele no módulo como ele aqui o serviço do Prisma para que ele seja usado em outro módulo é necessário que o módulo que detém o Serviço exponha o serviço porque senão ele fica só privado ali para aquele módulo então agora vai funcionar voltamos aqui a funcionar mas uma estratégia de trabalhar aqui com esse Prisma porque eu vou usar uma conexão Global aqui para minha api que faz sentido Não tenho nada de multi ou algo do tipo Então
posso colocar aqui um um decorator Global aí não preciso mais importar esse Prisma mod o prisma mod tá no nosso módulo Raize já tá importado aqui então inclusive Elde ficar depois do config mod que faz a leitura das variáveis de ambiente Então já tenho uma conexão Global volta a funcionar aqui então agora nós podem voltar aqui pro nosso serviço Beleza então uma vez que eu tenho Prisma service importado nós vamos receber aqui o nome da Rota o soci id e o Destination id e aqui nós vamos pegar as direções né eu não posso confiar com
o cliente me mandando todo o Trajeto nós vamos ter que acessar novamente o Google Mapas usando o serviço de directions então Private Direction service Direction service tá ao fazer isso aqui ele vai dar aquele mesmo erro lá com o prisma ele fal Ah não sei e pegar esse serviço porque ele tenta usar o contêiner de serviços ali para poder injetar isso aqui ele não conhece dentro do módulo de rout né porque eu não tenho acesso as questões Dos mapas aqui sim eu posso importar né é algo específico desse módulo Então vou usar imports Maps mod
e para que o routes Mod utilize o serviço de directions eu preciso expor esse serviço então nós vamos expor aqui somente o Direction service né então plac Services eu não preciso fazer essa exposição então voltou a funcionar show de bola Então a primeira coisa que eu vou fazer aqui é This Direction service passando o get directions com as dois as duas informações e ele tá chando aqui que eu não tenho os dois aqui aqui na verdade é source ID né porque a gente tá trabalhando mais no estilo kem Case poder ficar um pouco melhor e
aqui o Destination ID os nomes são diferentes Então nós vamos fazer aqui uma ait ayn nós vamos precisar das informações aqui desse directions então eu já vou quebrar o meu objeto nós vamos precisar Do available trave modes do é o cod Way points do roues e do request Tá show de bola então eu vou chamar um dis Prisma service route para ele poder criar essa rota para mim E aí nós vamos passar aqui os dados tá então eu tenho o nome da Rota que vem lá da minha requisição vamos pegar aqui colocar lado a lado
porque vai ficar fácil de vocês entenderem Então vou pegar aqui esse Service e a gente coloca o esquema aqui lado a lado então o Source vai ser um objeto mais complexo né então o Source eu vou precisar aqui do nome desse source do location que vai ser né porque dentro do source aqui eu tenho o name tem location que no location tem uma latitude e longitude então latitude depois a gente preenche com tudo que é necessário aí a mesma coisa eu faço para Destination É porque eu não tenho Destination aqui ó então mudo para Destination
aqui beleza aí nós vamos precisar aqui eu estou com source e tal fechou aqui eu preciso da distância duração e distância distância e das direções tá direções Vamos colocar aqui um um objeto Por enquanto né porque vai poder ser um json data de criação atualização não precisa que ele vai preencher né então vai ser isso aqui que A gente precisa eu vou até já colocar aqui que eu vou ter um posso retornar na verdade isso aqui direto porque ele vai retornar o objeto da Rota então agora vamos preencher com tudo que tá vindo aqui então
o nome do meu source vai ser vou pegar essa informação aqui em cima chamada de leg routes na posição zero pon legs onde nós vamos conseguir as informações aqui do source e do Destination então aqui vai ser legs PST Address aí tem as duas posições Latitude Longitude a a mesma coisa aqui pro Destination tem o ERS ali o lng e agora a duração duração também tá no leg tudo que a gente tá pegando de lá então tem o Val tá não posso pegar só de duration aí a distância e restou o directions tá o directions
vai ser a junção aqui das seguintes informações do available Travel modes do Ge code gecod do points do routes e do request são essas informações que nós pegamos todas essas aqui tá mas o que que vai acontecer e o prisma na tipagem ali do typescript ele porque isso aqui precisa ser um Jon um Jon puro e E essas informações aqui elas são objetos mais específicos né que vão ter e métodos e outras coisas então o que ele tá dando de erro aqui eh falando que ele não consegue armazenar essas Informações que ele precisa de um
Jon puro né que é justamente esse input Jon value aqui tá Então nós vamos fazer aqui um Force para poder transformar isso num objeto puro Primeira coisa eu uso um json string WiFi isso vai fazer com que o converta Force isso para um Jon string né E aí eu forço ele de volta com Jason parse que ele volta a ser um objeto mas um objeto puro descartando tudo que a gente não precisa show de bola então tá Aqui a criação da nossa rota até pra gente poder testar depois aqui eu vou criar um find out
que eu posso consultar tudo então vou fazer um dis Prisma service route find Main que é assim que a gente consegue consultar todas as rotas disponíveis e aqui o find One find One a gente vai receber o ID da Rota e o ID vai ser um Object ID que é um hash lá do mong DB Então não é número tá então vou mudar isso aqui para string E aí eu faço Um find tem várias formas de fazer a gente pode até fazer assim ó um find Unic or troll que se não existir ele dá um
erro né Aí eu passo aqui o meu ID o CoPilot tentando ajudar o meu ID string né Se eu tentar passar um inteiro aqui o prisma tem toda a tipagem dele vai mostrar um tem uns dois métodos lá que eu não vou utilizar aí que é o update e remove se você quiser implementar depois fica como dever de casa então aqui no Nosso Controller eu tenho que consertar o find One que a gente recebe o parâmetro como string É só passar esse parâmetro o find All já está feito o Create também então agora vamos fazer
aqui em API http a nossa nova rota né então vou fazer aqui um post http 2 barra local host na porta 3000 bar routes aí eu tenho que passar um content Type application json com o Source id e o Destination ID lembrar que é Estilo k cas né Destination ID Opa Destination ID Beleza a gente até pegar das variáveis que estão aqui em cima né Logo em seguida eu posso fazer a consulta das rotas aí depois eu posso fazer a consulta de uma rota em específico aqui depois a gente coloca um valor ok aqui eu
tenho que Colocar três hashtags Beleza então a gente já tinha colocado um Orange ID Destination ID vão ser esses valores que vão ser passados para cá né direto aqui com as variáveis Então não preciso fazer mais nada a não ser criar ele deu um erro 500 na hora que ele foi fazer a chamada exatamente no Direction service Então tem alguma coisa vamos só testar aqui a gente tá recebendo as informações aqui corretamente Fazer um console log nós temos ali o Source ID Destination ID eu acho que por eu ter feito Ah já sei o que
é acho que não preciso nem desse console log como eu fechei abrir o vest code Ah não eu continuo com os valores aqui né tô usando os valores então eu tenho que testar mesmo tem alguma coisa estranha a minha IPI tá funcionando aqui então vamos ver fazer aqui a chamada se ele chegou lá Bonitinho os dois valores é o Destination ID aqui que eu fiz errado né aqui ó não tinha visto todos os dois com o estilo queem Case agora ele acabou retornando aqui um erro name is missen ah a gente coloca tem que colocar
um nome aqui qualquer Então vamos colocar assim ã rota um por exemplo beleza aí ele até retornou aqui o nosso objeto o Que que aconteceu que ele não alguma coisa que a gente esqueceu de fazer aqui aqui eu tô retornando à rota no Controller eu não fiz nenhuma mudança Ele ainda tá executando aqui eu esqueci de algum await aqui eu coloquei await na verdade isso aqui é o que eu recebi né ele tá provavelmente com algum problema para poder se comunicar com o Mongo que Rot Rot DB ver o que que aconteceu aqui é realmente
um problema com o mongo aqui vamos ver o que que tá rolando fazer aqui uma coisa eu vou destruir todos os meus contêiners Bom de ter contêiner é isso né que eu posso destruir tudo facilmente e agora Rod do Run start Dev e vamos tentar criar Aqui ele bateu lá o prisma que tá com algum problema para poder fazer essa comunicação Rot Hot DB tudo certo aqui vamos dar uma olhadinha na extensão do Mongo se a gente consegue se comunicar é tá a gente tá conseguindo se comunicar Via Local host que tá acontecendo é o
problema aqui dentro mesmo com uns contêiners fiz um debug para descobrir o problema a nossa extensão aqui consegue se comunicar Exatamente utilizando do o local host porque e a gente expôs ali a porta 27017 mas a nossa comunicação é diferente porque nós estamos utilizando é o ambiente do contêiner que tem uma rede interna tá então quando coloca dessa forma aqui e tem o modo réplica ele não consegue eh fazer aqui a conversão do endereço e encontrar a réplica então aqui a gente vai colocar um Direction Connection igual true tá Não precisa dess SSL aqui igual
a falso Para ele poder fazer a conexão direta tá então Lembrar de fazer aqui o Restart Dev de novo e aí nós vamos fazer aqui a nossa chamada novamente pra gente poder fazer o nosso teste e está aqui a nossa nosso route criado né então vai ser um objeto bem grande tem o Source destin o ID esse aqui é o Object ID que foi gerado lá no m DB nome da Rota e as Outras informações enfim a gente tá retornando direto né a gente poderia até quisesse ordenar essas informações aqui colocar o id em primeiro
lugar seriam mais melhorias aqui na própria api que o Express né que tá provendo por debaixo dos panos aí do nest depois lá na aula do nextjs nós vamos falar sobre essa questão aqui do desse objeto grande né porque nós vamos ter uma latência maior E aí nós vamos usar depois o Frontend para evitar ficar batendo na api toda hora para poder prover essas informações aqui a api que controla ela que vai prover todas as informações da Rota ponto de origem destino todos os waypoints disponíveis não tem como eh eh não tem outra opção a
gente tem um json realmente grande mas é isso e a gente consegue então listar esses endereços vamos pegar aqui um get routs então consigo pegar aqui todas as minhas rotas ele Retornou um Array ao invés de um objeto se eu pegar aqui o ID dele o ID aqui eu tenho que conseguir consultar a rota show de bola Então é isso que a gente tem que fazer agora restamos aqui o último serviço que é o serviço para armazenar o posicionamento dos motoristas Então nós vamos ter aqui uma outra coleção inclusive deixa eu até mostrar lá dentro
do Mongo n se você tiver Curiosidade você pode fazer aqui um update tem como fazer um Refresh aqui acho que se eu desconectar e conectar novamente agora ele vai mostrar ali o nest então tem o nest que é o banco de dados e o route que é o documento melhor que é a Collection né Aqui tá o documento que eu consigo acessar armazenado como um Jon lá eu posso fazer modificações aqui é muito legal isso né a gente vai ter uma outra coleção para poder brincar com o Armazenamento do posicionamento do motorista Então nós vamos
ter um out driver com identificador uma relação com Qual rota que o motorista dirigindo ali então isso aqui é uma relação que nós estamos fazendo né coloc qual é o tipo do objeto e a relação que é o route ID que tem aqui na linha seguinte que vai ser um Object ID que ele tem que ser igual aqui de cima ele vai se relacionar com o ID da outra coleção aí eu tenho todos os Pontos que vai ser um tipo personalizado que é esse aqui ó Então eu tenho uma coleção de pontos por onde que
ele passou tá vendo que eu tô reaproveitando o Cord aqui inclusive seria até bom colocar ele aqui ó então tem a coordenada e a data de criação daquela coordenada para saber ali o tempo que ela foi registrada e aqui o o registro como um todo quando o motorista começou a transitar então tem a data de criação como a gente fez ali Em cima e updated at e eu poderia ter aqui um status para controlar isso eu não vou nem acrescentar aí quando eu faço aqui um comando de alinhamento Olha que interessante ele adiciona aqui no
route Qual a relação com route driver né porque a gente consegue pegar o relacionado do lado contrário tá essa interrogação aqui significa que o relacionamento não é obrigatório porque a princípio né a Gente não vai ter nenhum H drive faz total sentido mas depois quando tiver a gente vai conseguir pegar então quando eu faço isso aqui eu tenho que rodar lá o npx prisma generate para ele poder atualizar o tipo para mim se fosse banco de dados ter que gerar uma nova migração para poder gerar a tabela show de bola Então eu consigo fazer aqui
deixa eu só ver se tá ele tá funcionando se eu consigo acessar o h driver é hoje o meu vs code não tá aquela brast temp né Deixa eu fazer aqui um Stop no meu contêiner porque ele não tá pegando o meu tipo tá com algum bugzinho de que normalmente isso é automático ali quando ele consegue ler os tipos vou fechar ele aqui vou abrir de novo Tem outros modos de fazer Também Poderia abrir a node mods ali na tipagem específica agora estou com meer de Pack novamente show de bola vamos ver aqui agora se
ele me d o r driver Dri aparece Então posso iniciar de novo aqui o me outro coner do node com Dev lembrar sempre de fazer dentro doer é muito importante você sempre desenvolve com os comos dentro doer Então agora eu vou criar aqui na verdade com o npx aade aqui eu já tenho nest eu não tenho Comando do nest aqui né até poderia fazer aqui uma outra coisa importante ó eh vou colocar uma barra aqui colocar outra barra aqui e aqui eu vou fazer o npm instal menos G do @js barc vou pegar a versão
que a gente tá usando aqui aqui ó que é a versão deixa eu até pegar versão específica bags barc a gente tá usando essa versão aqui ó então é bom frear a Versão então agora V parar aqui os containers eu rodo com o Up menos menos build porque eu posso fazer o comando lá do nest generate dentro do coner para evitar fazendo a minha máquina né inclusive deixa eu ver eu fiz alguma coisa errada aqui eu tenho que colocar um I né tô concatenando todos os comandos ali faltou I por isso que deu errado quando
vai ser bem rápido tá instalando de Novo as coisas que eu coloquei ali no APT oos SL o PR PS pronto então já entro aqui faço npm start Dev pronto então agora eu tenho nest aqui dentro posso fazer um nest generate E como eu quero criar o serviço de route driver dentro de routes Então vou colocar routes aí eu coloco routes driver e eu quero gerar um service que eu esqueci aqui show de Bola então agora eu tenho um serviço para armazenar esses posicionamentos a gente vai receber aqui eu vou chamar nós vamos ter apenas
uma uma rota aqui que vai ser o process route nós vamos receber um dto posso até criar um tipo externo mas eu vou receber o route ID que é uma string Qual é a latitude e longitude que eu estou no momento então dois números lng e nós vamos fazer o nosso processamento aqui então eu vou precisar Acessar o serviço do Prisma Prisma service vai ser do tipo Prisma service e agora nós podemos fazer a nossa lógica a primeira coisa que eu quero fazer aqui é adicionar as posições né Aí vem aquela situação porque eu posso
ter o registro lá do H driver criado ou não ele não está criado eu vou gerar um Todo bonitinho com as primeiras posições aqui nesse points se ele já existe nós só vamos acrescentar esse points aqui na verdade né nós só vamos ir acrescentando ali as coisas então nós temos um método isso tem no próprio mongo mas o o prisma replica isso que é o upsert que ele faz o update ou insert dependendo al se existe o registro ou não então vou fazer um prisma service route driver upset aí eu vou passar aqui algumas informações
tá Primeira coisa que eu vou fazer é o Where que é eu quero pesquisar onde o route ID é igual ao WR ID que tá sendo passado né Beleza aí eu vou passar o Create se ele for Criar e o update se ele for atualizar se ele for criar eu tenho que passar aqui o route id e o points que vai ter a minha primeira posição aí eu coloco assim ó set tá para ele poder posicionar o location com latitude e longitude Tá por a gente tem exatamente o location só a passar o creat The
ele vai acabar fazendo mais e de forma automática né agora pro caso do update eu só quero mudar o points então coloco points E aí a operação que eu faço é o push esse set né ele sobrescreve tudo o push ele vai acrescentar então eu coloco aqui o location a mesma coisa com latitude e longitude aí deixa eu tirar essa Partezinha daqui aí nós temos o aight E5 para poder passar tá aqui na hora de fazer até o retorno eu posso colocar aqui um include route iG true porque aí ele já carrega os dados da
rota para mim isso aqui é chamado de eger loading né Estou fazendo o carregamento prematuro do relacionado já até para a gente já poder ter o objeto definitivo então eu tenho aqui o Meu route driver n que eu não estou utilizando ele em lugar nenhum ainda aí e a gente vai fazer depois algumas coisas aqui que vai ter integração com CFC nós vamos mandar essas posições para lá mas na verdade eu posso até retornar depois eu vou mudar esse como eu vou retornar direto não precisa nem disso aqui tá então ten meu serviço aqui ele
já Está registrado no meu módulo está registrado aqui eu posso brincar com ele porque ele vai ser acessível depois via websocket nós não vamos ter uma rota http que vai ser acessível eu posso brincar aqui no nest com um camaradinha chamado de rapple né que vai permitir que eu Rode essa aplicação direto no terminal para poder brincar com ela então eu chamo aqui o módulo e chamo por essa função inha do nest Então olha que legal agora o que eu Vou fazer é eu tenho que na verdade adicionar aqui o o rapple Eu poderia até
adicionar um comando mas eu poderia fazer um Run start Dev menos menos menos menos entry file igual a rapple aí aqui eu posso digitar coisas então eu posso pegar Eh o meu route Services por exemplo e fazer um find All quantos registros eu tenho lá na verdade aqui eu tenho que Colocar a wait né ó eu tenho a rota que foi criado né que tem aquele ID ali então eu posso pegar o meu routes verdade como é que eu coloquei é routes no plural driver service aí eu tenho o process route eu tenho que passar
aqui então o rout ID que é esse que eu acabei de pegar latitude pode ser qualquer coisa e lng pode ser qualquer coisa então vamos colocar aqui um a e tá aqui ó Nós Criamos o nosso primeiro route driver né posso olhar aqui no mongo Cadê o meu mongo que sumiu esse aqui sumiu que ele foi desinstalado eu não fiz nada né ele tá ativo aqui ele só assumiu dessas opções ou ele está aqui presente em algum lugar já que ele tá dando erro aqui eu vou pegar string de conexão eu vou passar aqui sem
directions sem Direction Connect aqui vai local host ele tá conectado mas ele não tá me permitindo abrir aqui o v code tá realmente bugado DB tá ativo agora aparece então tenho o rout driver aqui cadastrado e o documento lá complexo né com o ponto que eu cadastrei tá lá a data ele acrescenta dessa forma então se eu chegar aqui no terminal e lançar novamente como o route driver já existe na verdade ele tem que adicionar mais Uma posição então agora vamos pegar aqui o documento de novo documento Olha só eu tenho duas posições e ele
não mexeu nas outras informações né então esse upsert ele ajuda demais porque você não tem que ficar fazendo if e algo do tipo né Eh você encontra também essas opções com outros bancos então fechamos aqui a nossa api pessoal né Nós temos Então esse parte aqui de mapas das dos lugares Das direções e aqui do route driver depois nós vamos acrescentar mais algumas coisas aqui mas esse aqui é o o serviço Core que vai gerenciar todos esses trajetos né o frontend depois vai se basear nessa Api para poder fazer toda o manuseio ali mostrar pros
administradores pro motorista né para quem está interessado Então esse aqui é o nosso primeiro vídeo Espero que você tenha gostado o código fonte já está disponível para vocês pratiquem bastante Né brinquem à vontade aí com o DOC com a aplicação E é isso que vai fazer vocês evoluírem então vamos continuando aqui na Nossa Saga é isso aí e até a próxima pessoal tchau [Música]