‫Professor: Então, lembre-se de
‫como, no vídeo sobre nosso modelo de dados,
‫dissemos que poderíamos incorporar ou fazer referência
‫aos dados do guia turístico, portanto,
‫neste vídeo, vou mostrar como poderíamos implementar a incorporação
‫de documentos de guia turístico em um documento turístico.
‫Então, novamente, nesta aula vamos incorporar documentos
‫do usuário em documentos de tour e, em seguida,
‫no próximo vídeo, vou
‫mostrar como podemos realmente fazer referência
‫aos usuários em vez de incorporar, certo?
‫Portanto, a ideia aqui é que, ao criar
‫um novo documento de passeio, o usuário simplesmente adicionará
‫uma matriz de IDs de usuário e, então, obteremos
‫os documentos de usuário correspondentes com base
‫nesses IDs e os
‫adicionará aos nossos documentos de passeio.
‫Em outras palavras, nós os incorporamos ao nosso tour, certo?
‫Então, vamos fazer isso aqui agora.
‫Portanto, os guias serão do tipo array, certo?
‫Muito simples e, na verdade, antes de implementar qualquer
‫código, deixe-me mostrar a você como um
‫exemplo de como isso funcionaria ao criar um novo tour.
‫Então, vamos voltar ao Postman
‫aqui e criar um novo tour,
‫ok, e aqui
‫em nosso corpo, é claro, agora adicionaríamos os guias,
‫aspas e, em seguida, especificaríamos uma matriz de IDs, ok?
‫Então, vamos obter alguns IDs de usuário.
‫Então, pegue todos os usuários, vamos ver o que temos aqui.
‫Temos um guia aqui, na verdade,
‫vamos pegar esse ID
‫junto com as aspas, na
‫verdade, vamos colocá-lo
‫aqui e adicionar alguns outros.
‫Então, isso aqui também e, na verdade, apenas esses dois.
‫Isso deve ser o suficiente para testar essas coisas, ok, e então é
‫assim que vamos criar
‫um novo passeio com dois guias, ok, e
‫novamente, uma vez que salvarmos este passeio,
‫iremos então, nos
‫bastidores, recuperar o dois
‫documentos de usuário correspondentes a esses dois IDs, certo?
‫Então, vamos implementar isso e,
‫de volta ao
‫nosso modelo, o melhor lugar para
‫fazer isso é um middleware pré-salvo, certo?
‫Então, isso acontecerá automaticamente nos bastidores, basicamente,
‫cada vez que
‫um novo tour for salvo e, na verdade,
‫não quero fazer isso aqui.
‫Portanto, temos a consulta, aqui, aqui
‫está o documento "Middleware", então vamos
‫fazer isso aqui.
‫Então tourSchema. pré,
‫tudo bem, vamos ligar agora mesmo aqui, para
‫não esquecermos no final.
‫Ok, então entendemos isso. guias como uma entrada, e lembre-se de que
‫este será um array de todos
‫os IDs de usuário, certo, e então faremos um loop
‫por eles usando um. mapear, e
‫a cada iteração obter o
‫documento do usuário para o ID
‫atual, certo, e vamos armazenar isso dentro de guias, certo?
‫Então, o elemento atual, que será
‫o ID,
‫vamos chamá-lo de ID para
‫facilitar o entendimento, e agora precisamos do usuário,
‫certo, vamos prosseguir e importar isso.
‫Então, const User,
‫require,
‫e está na mesma pasta aqui, certo, User.
‫findByID com o ID atual, certo?
‫Mas agora, tenha em
‫mente que realmente precisamos aguardar essa promessa aqui, certo e,
‫portanto, a função precisa
‫ser marcada como assíncrona,
‫mas agora temos um problema, certo,
‫porque o. o método map
‫atribuirá o resultado de cada iteração ao novo elemento
‫na matriz de guias, ok, e agora
‫temos uma função assíncrona
‫aqui e, como você sabe, que retorna
‫uma promessa, e agora esta matriz
‫de guias aqui é basicamente uma série de promessas, ok.
‫Na verdade, vamos chamar esse guia de
‫Promessas e agora precisamos
‫executar todas essas promessas, basicamente ao mesmo tempo.
‫Como mostrei a você um pouco antes
‫neste código, pelo menos se
‫você não pulou a seção JavaScript assíncrona,
‫tudo o que precisamos fazer é aguardar Promise. tudo e então orienta
‫Promessa, ok, e podemos
‫atribuir diretamente o resultado disso
‫a isso. guias, e basicamente sobrescrever
‫aquela matriz de IDs do templo com
‫uma matriz de documentos do usuário, ok, e como agora
‫estamos usando o
‫await aqui, precisamos marcar esta função como assíncrona, ok?
‫Salve, e acho que é isso mesmo, certo?
‫Então, novamente, precisamos usar Promise. tudo aqui porque
‫o resultado de tudo isso aqui é uma promessa, ok,
‫e então este array aqui vai ser um
‫array cheio de promessas que
‫então executamos aguardando Promise. Tudo certo?
‫Então, vamos realmente testar
‫isso agora, e já temos todo esse código pronto,
‫devemos apenas alterar esse nome aqui.
‫Então, 'Test Tour', mas os IDs já estão aqui.
‫Então, vamos enviar isso, e nosso nome de tour precisa ser mais
‫longo, 'Novo tour de tarefa. - Tudo
‫bem, mas agora vamos dar uma olhada em nossos
‫resultados e, de fato, recebemos nossos guias aqui, certo?
‫Então, esses são os documentos
‫completos e, na verdade, não apenas as identificações, certo?
‫Ótimo, então é assim que
‫poderíamos implementar a incorporação para este exemplo de guia de turismo.
‫Agora, esse código simples que implementamos aqui,
‫é claro, só funciona para criar novos documentos,
‫não para atualizá-los, certo?
‫Portanto, agora teríamos que seguir
‫em frente e implementar essa mesma lógica também para atualizações.
‫No entanto, não vou fazer isso
‫porque, lembre-se do vídeo em que modelamos nossos dados,
‫que na verdade existem
‫algumas desvantagens de incorporar esses dados neste caso.
‫Por exemplo, imagine que um guia
‫turístico atualize seu endereço de e-mail ou
‫mude sua função de guia para guia líder.
‫Cada vez que uma dessas mudanças acontecesse, você
‫teria que verificar se um tour
‫tem aquele usuário como guia e, se
‫sim, atualize o tour também, e
‫isso dá muito trabalho e
‫não estamos
‫vai nessa direção, certo?
‫Agora, eu ainda queria mostrar como
‫a incorporação realmente
‫funciona e como podemos implementá-la
‫nessa situação, porque realmente acredito que é
‫muito importante que você ainda saiba
‫fazer tudo caso precise
‫em seus próprios aplicativos, ok,
‫mas nesta situação particular iremos,
‫em vez de incorporar, usar referência, e
‫eu falei sobre as razões
‫para fazer isso naquele vídeo, ok?
‫Então, vamos prosseguir e fazer isso
‫direito na próxima aula.