‫Instrutor: Tudo bem, e agora só para terminar esta
‫parte, vamos criar algumas fábricas para a obtenção de documentos.
‫E vamos começar com getOne aqui, ok?
‫Exportações. getOne, mas este é um pouco
‫mais complicado, porque temos um
‫populate no manipulador getTour.
‫Então, vamos dar uma olhada nisso.
‫Então, bem aqui, neste, temos esse populate aqui, que é
‫diferente de todos os outros
‫get handlers nos outros recursos, certo?
‫Mas, bem, isso não
‫é realmente um problema porque simplesmente nos
‫permitiremos passar um objeto de opções populadas para nossa função getOne, certo?
‫Então, em vez de simplesmente
‫passar o modelo, também teremos opções de populate, certo.
‫E então, a partir daqui, retornaremos a
‫função de tratamento normal.
‫Então, vamos copiar tudo isso novamente, tudo
‫bem.
‫Portanto, não precisamos deste aqui.
‫Então aqui, como sempre,
‫é modelo, e aqui está doc.
‫Bem, na verdade aqui, documento,
‫e aqui, mais uma vez, dados iguais a doc.
‫Agora, também precisamos fazer algumas alterações
‫aqui por causa deste popular,
‫então basicamente, vamos primeiro criar a consulta e,
‫em seguida, se houver o objeto de opções de
‫preenchimento, iremos adicioná-lo
‫à consulta e, em seguida, por final aguarde essa consulta, ok?
‫Faz sentido?
‫Então, vamos traduzir o que acabei de dizer.
‫Portanto, a consulta é simplesmente igual a Model. findById, assim,
‫certo?
‫Então, se houver um objeto de opções de
‫preenchimento,
‫bem, nesse caso,
‫a consulta será uma consulta. preencher com as opções de preencher, certo?
‫E então, finalmente aguardamos nossa consulta, e a
‫salvamos no documento.
‫Então, aguarde a consulta assim, tudo bem.
‫E assim, é realmente isso.
‫Então, essa lógica que
‫temos aqui de não esperar a consulta logo
‫de cara, mas sim salvá-la em
‫uma variável, para que possamos, no próximo passo, manipulá-la.
‫Na verdade, já fizemos esse tipo de
‫coisa antes, quando estávamos construindo nossos recursos de API, certo?
‫Então, só no final, quando toda a consulta estiver
‫pronta, vamos aguardar e armazenar em algum lugar de uma variável.
‫Agora, vamos seguir em frente e realmente usar este em todos os lugares,
‫começando, é claro, com o Tour.
‫Portanto, getTour agora será
‫de fábrica. getOne
‫e passar o objeto
‫Tour and popular options, lembra disso?
‫E então, o que vamos fazer é dizer caminho e avaliações.
‫Certo, então lembre-se de que a propriedade path
‫é basicamente o
‫campo que queremos preencher, e então também
‫podemos especificar select, então lembre-se deste,
‫onde especificamos qual dos campos realmente queremos obter, certo?
‫Mas, neste
‫caso, não temos nada
‫disso, então vamos deixar assim.
‫E agora, podemos ir em frente e excluir tudo isso.
‫Tão bom.
‫E, só para ter certeza, vamos testar isso rapidamente.
‫Então, vamos fazer um certo Tour
‫e, de fato, ainda funciona.
‫Vamos ver se este teve alguns comentários.
‫Ah, sim, na verdade é, e
‫você vê que o processo de população também ainda está funcionando.
‫Então, foi um sucesso, eu diria.
‫E então, agora vamos usar este getOne em
‫todos os outros recursos.
‫Então, o controlador de usuário aqui onde temos, vamos ver
‫onde está, ah, aqui embaixo.
‫Então, digamos fábrica. getOne, mas apenas
‫com o modelo do usuário, e nenhum objeto
‫de opções de preenchimento.
‫Ok, e já que estamos
‫aqui, vamos apenas alterar a mensagem de erro aqui
‫para criar usuário,
‫para que esta rota não seja definida, nunca será, e
‫por favor use inscrição em seu lugar.
‫Em seguida, e
‫finalmente, basicamente a mesma coisa para as resenhas.
‫Então, exportações. getReview é
‫igual de fábrica. getOne review,
‫e acho que ainda não temos (resmunga) nossas rotas.
‫E, de fato, não fazemos isso, adicionando isso bem rápido
‫aqui, reviewController. getReview, ok?
‫Vamos testar este também rapidamente,
‫só porque também quero adicioná-lo aqui
‫ao Postman, certo?
‫Então, apenas copiando este porque é semelhante, e então, de
‫fato, ele é obtido.
‫E, sim, funciona perfeitamente bem, armazene-o aqui em comentários
‫e obtenhaReview.
‫Tudo bem, agora tudo o
‫que está faltando é basicamente uma função getAll de fábrica, certo?
‫Então, basicamente,
‫para substituir getAllTours, getAllUsers, que também devemos
‫ter em algum lugar aqui, getAllUsers e também
‫getAllReviews, então vamos copiá-lo novamente aqui do controlador
‫de tour porque na verdade este
‫é o que está realmente completo
‫porque tem tudo esses recursos da API e,
‫portanto, depois de criar nossa função getAll factory,
‫todos os três recursos obterão esses recursos da API.
‫Então, novamente, copiando tudo isso, as
‫exportações. getAll,
‫e agora, teremos que exigir esses recursos
‫da API
‫aqui e, na verdade, podemos removê-los daqui porque
‫não precisaremos mais deles porque
‫agora transferimos isso para a fábrica do manipulador, certo?
‫Agora, aqui tudo o que precisamos fazer é
‫substituir, como sempre, por modelo, e
‫aqui, doc e dados.
‫Agora, certo, perfeito.
‫Então, vamos
‫ver se isso funciona, getAll with Tour.
‫E agora, eu realmente quero ver se
‫isso ainda funciona com todos esses
‫recursos, e então está aqui, getAll Tours,
‫e então, vamos adicionar
‫nossa string de consulta aqui e, digamos, uma duração maior ou
‫igual a, digamos, um 10, e classificar por preço.
‫Ok, então temos dois resultados aqui.
‫Ok, não está funcionando.
‫De qualquer forma, temos os dois resultados (risos) aqui,
‫e ambos têm uma duração maior que
‫10, e o preço é
‫1497, e o segundo é mais alto, certo?
‫Vamos colocá-lo aqui como sete, para termos
‫um pouco mais de resultados.
‫Ok, e agora temos cinco.
‫Ok, de qualquer maneira, agora vamos fazer o mesmo com as
‫análises porque estou muito animado para testar esses recursos da
‫API nas análises também.
‫Agora, um problema que temos aqui
‫é que esse manipulador de rota na verdade tem essas
‫duas linhas de código que todos os outros manipuladores getAll não têm, certo?
‫Mas, o que vamos fazer aqui é simplesmente copiar esse
‫código em nossa fábrica de manipuladores também, certo?
‫Isso é meio
‫que um hack, porque realmente só precisamos dele para getAll
‫reviews, mas para contornar isso seria um pouco
‫trabalhoso aqui nesta situação, e mais uma vez, eu
‫simplesmente quero mantê-lo simples aqui, tudo bem.
‫Então, vamos
‫copiar isso aqui, e estou adicionando um
‫comentário aqui para permitir getReviews aninhados no tour, ok?
‫E então esse filtro, vamos passar também aqui, ok?
‫Então, novamente, este é um
‫pequeno hack, mas
‫vou deixá-lo aqui assim porque acho que é razoável, certo.
‫De qualquer forma, vamos agora nos livrar
‫disso, então fábrica. getAll and review, ok?
‫Vamos realmente colocar isso aqui ao lado de todos os outros.
‫E agora,
‫como você pode ver, na verdade não precisamos mais desse catchAsync
‫aqui, então vou comentá-lo aqui
‫porque, quem sabe, talvez no futuro vamos precisar dele
‫para alguma outra função de Middleware aqui, tudo direito.
‫Então, isso parece bom
‫e limpo, e agora vamos testar os comentários getAll.
‫Tudo bem, então vamos salvar as alterações aqui também.
‫Não precisamos desses,
‫mas, na verdade, quero receber todas as avaliações.
‫Portanto, no momento temos
‫quatro análises, vamos tentar filtrar as
‫análises apenas com uma classificação de quatro, digamos.
‫Portanto, string de consulta, classificação é igual a quatro.
‫Ah, e realmente funciona,
‫tão bom, isso é muito bom.
‫Assim, assim, temos acesso a todos esses recursos da
‫API, como filtragem, classificação, paginação e todas as coisas boas que
‫implementamos (risos) há muito tempo
‫no curso, certo?
‫E também quero
‫ter certeza de que este getAll reviews on Tour também funcione.
‫Então, vamos verificar isso
‫e, sim, você verá que realmente funciona.
‫Então, o Tour ID
‫que temos aqui é exatamente aquele aqui e aqui.
‫Então, aquele também
‫está funcionando, então vamos finalmente
‫usar getAll para o controlador de usuário, certo.
‫Então, basicamente substituindo simplesmente
‫isso, então fábrica. getAll user, tudo bem.
‫E, na verdade,
‫vamos colocar este aqui perto dos outros, certo.
‫E, então, este também, então
‫basicamente tendo todos esses gerados por funções
‫de fábrica juntos, e
‫então todos os outros simplesmente acima deles.
‫Tudo bem, vamos fazer o mesmo aqui, este já
‫está bom e limpo, e
‫o mesmo para o controlador de Tour, então o
‫que mais temos aqui?
‫Podemos nos livrar
‫deste e, ok, acho que fica bem assim.
‫Novamente, podemos comentar este trecho de código
‫porque, pelo menos por agora, não precisamos mais dele.
‫E então, só para testar novamente aqui com os usuários, vamos
‫juntar todos eles e,
‫de fato, aqui estão eles.
‫Agora também podemos dizer que
‫queremos apenas aqueles com a função
‫de usuário e, de fato, isso também funciona.
‫Ótimo, e isso na verdade encerra essa parte da criação
‫de funções de fábrica do manipulador, e
‫isso realmente foi um grande passo à frente em nosso projeto,
‫então lembre-se que,
‫um pouco mais tarde, também criaremos um
‫recurso de reserva, e você verá que provavelmente nós
‫seremos capazes de criar a API principal para
‫essas reservas em cerca de cinco
‫segundos ou algo assim, simplesmente usando essas cinco funções de fábrica, tudo bem.
‫De qualquer forma, bom trabalho, ótimo trabalho,
‫e nos vemos no próximo.