‫-: Neste vídeo, vamos implementar a atualização do documento.
‫E então, aqui, em nosso manipulador de tour de atualização, vamos
‫começar tornando-o uma função assíncrona.
‫Então, ou tente pegar o bloco, e estou fazendo
‫isso muito rapidamente agora, porque já estamos acostumados com isso
‫neste ponto.
‫Direito?
‫Então, isso vai para o bloco try
‫e eu simplesmente pego este aqui, do bloco catch dessa
‫outra função.
‫Tudo bem, então.
‫Aqui vamos nós.
‫E agora, o que
‫precisamos fazer aqui no início
‫deste bloco try é basicamente consultar o
‫documento que queremos atualizar e, em seguida, atualizá-lo, certo?
‫E podemos realmente
‫fazer tudo em um comando com o mangusto.
‫E, lembre-se, novamente, que vamos atualizar o tour
‫com base em uma identificação, ok?
‫Então, é uma situação semelhante a esta aqui,
‫onde encontramos por ID.
‫E agora, podemos realmente fazer algo
‫muito semelhante, que é localizar por ID e atualizar.
‫Então, novamente, tudo em uma consulta.
‫Então, vamos fazer um tour.
‫findByID e atualização.
‫Ok, então, o que precisamos passar aqui?
‫Bem, é claro, o ID, para que possamos primeiro encontrar o
‫documento que deve ser atualizado.
‫Então, assim como antes, isso é req. params. ID e,
‫em seguida, os dados que realmente queremos alterar.
‫E esses dados estarão no corpo, assim
‫como na solicitação de postagem.
‫Então req. corpo, ok?
‫E então, como um terceiro
‫argumento, também podemos corrigir algumas opções e faremos isso.
‫E a primeira opção que desejo especificar é nova
‫e configurá-la como verdadeira.
‫Pois desta forma, então o novo documento atualizado
‫é aquele que será devolvido.
‫E já que queremos enviar de volta
‫aquele documento atualizado para o cliente,
‫sempre queremos que esse método realmente retorne aquele novo documento, ok?
‫Dessa forma, faz sentido aguardar
‫essa consulta e salvá-la em uma nova variável.
‫Então, basta chamá-lo de
‫tour aqui e, novamente, aguardar o resultado dessa consulta.
‫Todos esses métodos que usamos no
‫tour até agora, localizar por ID e atualizar ou,
‫bem, não criar realmente, mas localizar por ID ou localizar,
‫todos eles retornarão consultas, portanto, são consultas métodos e deixe-me
‫mostrar isso a
‫você na documentação do mangusto.
‫Então, até este ponto, não demos uma olhada
‫na documentação até agora.
‫E então, vamos fazer isso rapidamente.
‫Então, no modelo, que no nosso caso é o tour,
‫temos todos esses métodos de consulta, certo?
‫Então você vê localizar, localizar um, localizar por ID, que é
‫apenas uma abreviação para localizar um.
‫Em seguida, você vê localizar por ID e
‫atualizar, que é o
‫que estamos usando no momento e que, na
‫verdade, é apenas uma abreviação para localizar e atualizar, onde estamos consultando por
‫um ID, tão semelhante ao que teve na ultima palestra, ok?
‫E, na verdade, podemos clicar em qualquer um deles,
‫então vamos fazer o que estamos
‫usando atualmente, e isso nos levará realmente à documentação da
‫API que nos mostra como realmente usar um determinado método.
‫Então você vê que passamos o ID,
‫então o valor, fora do ID pelo qual consultar, passamos o
‫objeto com os dados a serem atualizados e passamos um objeto de opções.
‫E aqui podemos realmente ver
‫as opções que podemos definir,
‫então lembre-se, apenas definimos novo como verdadeiro e, como
‫diz aqui, isso retornará o documento modificado em
‫vez do original.
‫Agora, outro que realmente queremos definir
‫como verdadeiro são validadores de execução, de modo que cada
‫vez que atualizarmos um determinado documento, os validadores
‫que especificamos no esquema serão executados novamente, certo?
‫E falaremos muito sobre validadores e validação um pouco mais
‫adiante nesta seção, mas
‫vou deixar isso aqui por enquanto para que, basicamente, não nos
‫esqueçamos disso.
‫OK?
‫Salve agora e, na verdade, quero voltar aqui
‫apenas para mostrar quantos
‫métodos realmente temos no mangusto.
‫Portanto, no modelo, temos todos esses métodos que você
‫vê nesta lista.
‫Então, por exemplo, usamos create antes,
‫também usamos find.
‫OK?
‫E então os que vocês veem aqui no
‫topo estão disponíveis direto no modelo, e isso,
‫no nosso caso, é o tour.
‫Agora, aqui embaixo você, por exemplo,
‫também vê o modelo. protótipo. seguro, por exemplo.
‫E este, na verdade, também
‫já usamos bem quando começamos a trabalhar com o mangusto.
‫Portanto, não tenho certeza se você está familiarizado com isso,
‫mas no modelo de script java. protótipo sempre significa um
‫objeto criado a partir de uma classe ou, neste caso, criado
‫a partir de um modelo.
‫E assim, o método de salvamento aqui, refere-se a um método de
‫salvamento chamado em um documento e não em um tour.
‫E lembre-se de que foi exatamente isso que fizemos.
‫E acho que ainda tenho isso aqui como um comentário.
‫Sim, bem aqui.
‫Então, nós fizemos um tour, essa nova variável de tour aqui
‫que foi criada a partir do modelo
‫de tour, e então esse novo tour aqui teve acesso ao método save
‫porque ele faz parte do objeto de protótipo desta classe.
‫Certo, agora não quero aborrecê-lo com os
‫fundamentos do java script, mas
‫é importante para entender a documentação, ok?
‫Porque em algum momento você precisará usar documentação,
‫porque mangusto é yute.
‫E, na verdade, vou te ensinar muitas das
‫coisas que são importantes ao longo de todo este curso, mas
‫às vezes você ainda vai precisar de algo que não
‫lhe mostrei neste curso.
‫Portanto, é importante que
‫você realmente entenda a documentação também, certo?
‫E então, novamente, quando você vê o modelo. protótipo aqui, você
‫sabe que o método save aqui
‫estará disponível em todas as instâncias criadas
‫por meio de um modelo, ok?
‫E, portanto, não o modelo em si.
‫Então, por exemplo, se você tentou fazer uma turnê. salvo, você não
‫seria capaz de usá-lo.
‫Isso geraria um erro, mas, em vez disso, se você
‫tentasse salvar em um documento criado por meio
‫do tour, é claro que funcionaria, certo?
‫Espero que faça sentido.
‫E, de qualquer forma, você vê que
‫temos um monte de outras coisas, então temos que consultar, das
‫quais já falamos, porque, por exemplo, encontre por ID e atualize,
‫ou encontre, ou encontre por ID, tudo isso vai retornar objetos de consulta.
‫E então, mais tarde, quando vamos
‫implementar coisas como classificação ou filtragem, usaremos este objeto de consulta.
‫OK?
‫Então, vamos voltar, nós meio que saímos do caminho ao olhar
‫a documentação, mas, novamente, acho que é
‫muito importante começar a olhar
‫a documentação, porque um curso como
‫este só pode levar você até certo ponto, e eu
‫espero que você já saiba disso neste momento, ok?
‫É muito importante que você também possa encontrar informações
‫por conta própria, e também neste curso
‫quero mostrar como fazer isso.
‫De qualquer forma, vamos agora também enviar
‫este tour atualizado de volta para o cliente,
‫o que, no momento, não estamos
‫fazendo, porque temos simplesmente esse tour atualizado aqui.
‫Então, vamos nos livrar disso e simplesmente enviar para uma turnê.
‫E lembre-se de que isso, na verdade, é realmente isso.
‫Portanto, a propriedade tour é definida para o objeto tour, mas,
‫graças ao ES6, não precisamos mais fazer isso quando
‫o nome da propriedade tem o mesmo nome do valor.
‫Ok, então vamos nos livrar disso.
‫Isso faz com que nosso código pareça um pouco melhor.
‫Ok, e agora vamos testá-lo.
‫Voltando ao carteiro, aqui está o roteiro atualizado.
‫E então, vamos realmente
‫fazer isso no mesmo ID que usamos antes.
‫Então, este aqui.
‫Então chegamos ao corpo, aqui, e vamos mudar ...
‫Bem, o que vamos mudar aqui?
‫Bem, vamos mudar o preço para, tipo, 500.
‫Portanto, preço, 500, envie-o e, de
‫fato, isso nos dá o objeto
‫recém-atualizado com o preço já
‫definido para 500.
‫E se agora obtivermos todos os passeios, isso, é
‫claro, deve ser refletido aqui.
‫E aqui está.
‫Mas agora, digamos que o definimos como uma string.
‫Vamos dar uma olhada no que acontece, então.
‫Bem, então recebemos um erro.
‫E isso porque rodamos os validadores novamente.
‫Então, lembre-se de que temos ... Onde
‫fica isso?
‫Oh sim, aqui.
‫Portanto, aqui especificamos que os validadores devem ser executados novamente.
‫E então, agora o preço não é mais um número
‫como era esperado, certo?
‫Portanto, em um esquema, dizemos que o preço deve ser
‫um número, mas, é claro, java script ou
‫mongoose, na verdade, não pode, basicamente, converter essa string aqui em um número.
‫Mas é isso que esperamos.
‫Então aqui diz que tipo deve ser número.
‫E assim, portanto, nos dá um
‫erro, simplesmente porque estamos executando os validadores novamente.
‫Então, vamos colocá-lo de volta em 500 e, é claro,
‫ele estará de volta.
‫Tudo bem, agora, lembre-se de que estamos realmente
‫fazendo uma solicitação de patch aqui.
‫Agora, se estivéssemos fazendo uma solicitação de colocação,
‫lembre-se, você esperaria que o objeto
‫original fosse completamente
‫substituído pelo novo que é enviado, certo?
‫Então, nesse caso, não funcionaria
‫mais da forma que
‫implementamos aqui porque esse simplesmente atualizou realmente
‫os campos que são diferentes aqui no corpo, ok?
‫Mas de qualquer forma, acho que o
‫método patch é realmente muito
‫mais útil e, portanto, será o único a ser implementado aqui.
‫Legal, então temos três das nossas quatro operações corretas
‫implementadas, só falta mais uma, que
‫será excluída.