‫Instrutor: Neste
‫vídeo, vamos continuar implementando o recurso de revisão e,
‫desta vez, implementando um endpoint
‫para obter todas as revisões e também para criar novas revisões.
‫E então, neste ponto, estamos basicamente apenas revisando coisas
‫que já aprendemos antes nas seções anteriores.
‫E então, neste vídeo, tenho outro desafio para você.
‫Então, basicamente, quero que você implemente esses dois pontos de extremidade, um
‫ponto de extremidade para obter todas
‫as revisões e um ponto de extremidade para criar novas revisões por conta própria.
‫OK?
‫Portanto, crie o arquivo do
‫controlador e, em seguida, crie as funções do
‫controlador e, a seguir, crie também as rotas em seu arquivo de revisão de rotas.
‫E então, no final do curso, crie algumas novas análises
‫e também recupere-as do banco de dados
‫usando obter todas as análises.
‫Tudo bem.
‫Então, por favor, pause o vídeo agora e mãos à obra.
‫Tudo bem.
‫E agora é minha vez de realmente implementar isso, e
‫estou começando com as funções do controlador.
‫Então aqui mesmo
‫nós criamos a revisão do
‫controlador ponto js, então é claro que começamos solicitando a revisão.
‫Então, um nível acima, depois modelos e, em seguida, revise o modelo.
‫Então pegue todas as avaliações e usaremos o
‫mesmo nome de sempre.
‫Direito?
‫Então, já sabemos que
‫esta será uma função assíncrona porque vamos lidar
‫com o
‫banco de dados aqui, e também precisamos agrupar essa
‫função inteira no catch Async.
‫Então pegue o Async, acho que é assim que se chama.
‫Exigir.
‫Tudo bem.
‫E agora vamos simplesmente buscar todos os comentários usando await e,
‫em seguida, apenas um achado simples sem qualquer filtro.
‫Um status de 200 e, em seguida, enviar de volta ao JSON normal.
‫Status de sucesso.
‫Também definimos a propriedade
‫do resultado com o comprimento do ponto dos
‫comentários e, claro, os próprios dados.
‫Salve aqui e agora para o próximo.
‫Portanto, crie uma revisão.
‫Tudo bem.
‫E você começa a ver
‫aqui que, na verdade, estamos construindo muitos códigos duplicados.
‫Portanto, tudo isso aqui parece basicamente
‫igual ao que parece para os usuários e
‫para os passeios.
‫Direito?
‫E, na verdade, vamos consertar
‫isso um pouco mais tarde nesta seção.
‫Mas, por enquanto, eu realmente só quero fazer isso funcionar.
‫OK?
‫Então, por enquanto, não se preocupe em escrever todo esse
‫código que parece meio duplicado.
‫OK.
‫Chamamos isso de nova revisão e,
‫como sempre, usamos o dot create com todos os dados
‫que vêm do corpo.
‫OK?
‫E então, novamente, se houver campos no corpo que
‫não estão no esquema
‫de revisão, eles serão simplesmente ignorados.
‫E é por isso
‫que é seguro simplesmente fazer
‫assim ao criar um novo recurso.
‫Tudo bem?
‫De qualquer forma, vamos mandar de volta para o cliente como sempre.
‫Portanto, com um status de 201
‫para criado, e a revisão deve ser a
‫nova revisão.
‫Tudo bem.
‫Na verdade, sem dois pontos ali, ponto-e-vírgula e então, sim.
‫Todos esses são controladores.
‫Agora vamos prosseguir com a rota.
‫Portanto, revise
‫o Routes dot js.
‫E aqui, é
‫claro, começamos solicitando nosso controlador, e
‫para os controladores e revisamos
‫o controlador ponto js.
‫Em seguida, precisamos criar nosso roteador.
‫Então, expresso, e claro, também precisamos importar
‫expresso aqui.
‫Então, vamos fazer isso antes de fazer qualquer outra coisa.
‫Expressar.
‫Então, dot Router, e acho que é assim que funciona.
‫E agora
‫roteador e definir nossa
‫rota e esta novamente é basicamente a rota dos comentários.
‫OK.
‫Lembre-se de como, na próxima
‫etapa, vamos montar
‫esse roteador nas análises de barra da API.
‫OK?
‫Assim como fizemos com os passeios e os usuários.
‫E, na verdade, vamos fazer isso antes de qualquer outra coisa.
‫OK?
‫Então, apenas para tirar essa confusão
‫que você pode ter.
‫Então, vamos exportar o roteador daqui.
‫OK?
‫E agora podemos passar para o
‫app dot js.
‫E, claro, importe nosso roteador aqui.
‫E
‫exija, reveja as rotas.
‫OK?
‫E agora descemos aqui
‫e montamos este roteador em um novo caminho.
‫E esse caminho vai ser como
‫eu disse API slash V1 slash
‫reviews.
‫OK.
‫E, novamente, este roteador
‫aqui que estamos especificando agora é basicamente
‫um middleware que montamos neste caminho.
‫OK?
‫Portanto, sempre que houver
‫uma solicitação com uma url que comece assim,
‫essa função de middleware aqui
‫será basicamente chamada.
‫E então esse
‫é o nosso roteador e ali
‫apenas a rota de barra, então
‫apenas a raiz basicamente será esta revisão API V1.
‫OK?
‫Assim como fizemos antes de usar os outros dois recursos.
‫Então, tour Model, não era onde estávamos trabalhando.
‫Estávamos trabalhando na revisão de Rotas.
‫OK.
‫Portanto, especificamos uma rota.
‫Vamos agora especificar o método para
‫o qual especificamos nossa função.
‫Portanto, temos que obter, e
‫para isso usamos
‫ou reescrevemos a revisão Controller dot get All Reviews
‫Right?
‫E também temos uma postagem para
‫criar uma revisão.
‫OK?
‫Dê uma chance.
‫E, na verdade, queremos apenas que usuários
‫autenticados possam postar comentários.
‫E também apenas usuários que são realmente usuários regulares.
‫Portanto, nem administradores, nem guias turísticos.
‫OK?
‫Então, como podemos implementar isso?
‫Vamos lembrar nossa seção de autenticação.
‫Portanto, começamos exigindo nosso controlador de autenticação.
‫Então, novamente, controladores e controlador de autenticação.
‫E agora tudo o
‫que precisamos fazer é realmente usar as
‫funções de middleware que especificamos lá.
‫Lembrar.
‫Então, primeiro, usamos o middleware protect, então auth Controller dot
‫protect e isso
‫fará com
‫que protejamos esta rota para ser
‫acessada apenas por usuários que estão autenticados.
‫Direito?
‫E então,
‫na próxima etapa, dizemos que queremos
‫restringir essa rota, então usamos nosso middleware
‫restrito para apenas usuários com a função de usuário.
‫Tudo bem?
‫Novamente, fizemos isso aqui algumas vezes.
‫E então, realmente não há nada de novo neste ponto.
‫OK.
‫Acho que seguimos todos os passos.
‫Portanto, em primeiro lugar, temos um modelo que nos
‫permitirá criar novos documentos.
‫Então, temos nossas funções de Controlador
‫definidas em nosso Controlador para obter todas as
‫análises e criar análises.
‫Então, usamos essas funções de controlador ou
‫funções de
‫manipulador, pois você também
‫pode chamá-las, para criar algumas novas rotas.
‫OK?
‫E então criamos uma rota para
‫receber e postar avaliações.
‫E, assim como antes,
‫fizemos isso basicamente em um mini subaplicativo
‫que é apenas para análises.
‫E é por isso que
‫criamos nosso novo roteador que importamos para
‫nosso aplicativo principal e montamos nesta url
‫onde queremos acessar tudo relacionado a reviews.
‫Tudo bem?
‫Então, vamos prosseguir e testar isso.
‫Vou seguir em frente,
‫copiar isso e criar uma nova guia
‫aqui e
‫aqui estão as
‫avaliações e, claro, a postagem.
‫Tudo bem.
‫Então, o que realmente precisamos especificar
‫para postar uma nova avaliação?
‫Portanto, precisamos da própria revisão.
‫Lembrar.
‫Digamos "passeio incrível", a
‫classificação e vou
‫dar cinco aqui, o
‫passeio e o ID do usuário.
‫OK?
‫E agora precisamos obter a identificação de um dos passeios.
‫OK?
‫E então vamos usar o primeiro passeio
‫real aqui, digamos, então vamos usar este explorador do mar.
‫Tudo bem?
‫Então,
‫o ID do explorador do mar
‫e agora, é claro, também
‫precisamos do ID do usuário que postou a avaliação.
‫E podemos obter
‫isso aqui com todos os usuários.
‫E então, na verdade, temos apenas um usuário
‫que é um usuário regular.
‫Então este Jonas está aqui e vamos pegar essa identidade.
‫Tudo bem?
‫Agora, lembre-se de que
‫este usuário realmente precisa estar logado.
‫OK?
‫E assim, um pouco mais
‫tarde, obteremos automaticamente a ID de usuário do usuário
‫que já está conectado.
‫Lembre-se de que podemos fazer isso porque o middleware de
‫proteção colocará o usuário no objeto de solicitação.
‫Lembre-se disso?
‫Mas, por enquanto, eu queria mantê-lo simples aqui
‫e, portanto, com a
‫implementação atual, na verdade, precisamos fornecer o ID do usuário também.
‫OK?
‫Mas ainda precisamos fazer o login como um
‫usuário regular porque protegemos essa rota.
‫Lembre-se disso?
‫Então, vamos fechar alguns deles.
‫OK?
‫E faça o login aqui.
‫E fazemos isso como, então, olá, dot Jonas da IO,
‫então olá.
‫E sua senha é provavelmente e espero que ainda
‫seja a mesma.
‫E na verdade não é assim, vamos tentar uma nova senha
‫porque lembro que usei essa quando mudamos as senhas.
‫Ainda não funciona, então vamos criar
‫um novo usuário.
‫OK?
‫É claro que poderíamos redefinir a senha neste momento, mas isso
‫é um pouco trabalhoso
‫e, portanto, vou simplesmente criar um novo
‫usuário para que seja mais fácil testá-lo agora.
‫OK?
‫Então, vamos usar o teste em Jonas ponto IO
‫e o nome aqui será usuário de teste.
‫Tudo bem.
‫Ah, e já temos esse endereço de e-mail em nosso banco de dados e
‫isso é estranho.
‫Temos usuário.
‫Talvez não, não atualizamos isso corretamente.
‫Oh, mas talvez seja um usuário excluído.
‫Portanto, um usuário que não está mais ativo
‫e, portanto, não está aparecendo aqui.
‫Então, vamos dar uma olhada nisso na bússola.
‫E é claro que quando você está
‫no modo de desenvolvimento, você vai encontrar esse tipo de problema o tempo todo.
‫Então aqui, teste Jonas, e como eu estava dizendo,
‫é na verdade um desses usuários excluídos.
‫Tão ativo definido como falso.
‫Então, vamos tentar de novo.
‫Portanto, teste o usuário aqui também.
‫Então envie agora e estamos logados.
‫E agora estou copiando o ID deste novo usuário para
‫criar esta nova revisão.
‫Tudo bem?
‫Vamos enviá-lo agora
‫e, claro, obteremos que você não está logado por
‫engano porque, na verdade, não
‫fornecemos nosso token JSON da web.
‫Portanto, precisamos chegar à autorização, o
‫token do portador e,
‫claro, este.
‫Então, se tentarmos de novo,
‫aqui vamos nós.
‫OK.
‫Vamos criar outro para outro passeio,
‫desta vez para,
‫para
‫o próximo, então para Forrest Hiker.
‫Portanto, copie o ID aqui também.
‫Sim.
‫Aqui o usuário vai ser o mesmo, mas mais um tour.
‫Vamos dar quatro estrelas.
‫E vamos apenas dizer "adorei. "Algo
‫muito simples e bom.
‫Salve isso e vou
‫criar uma nova pasta aqui
‫para os comentários e, claro,
‫algo
‫deu errado aqui.
‫Então, onde está essa pasta?
‫Milímetros.
‫Na verdade, não está em nenhum lugar, então vamos apenas criá-lo aqui.
‫E podemos realmente mudar o nome aqui também.
‫Portanto, crie
‫uma nova revisão.
‫OK.
‫E agora também queremos obter todos os comentários.
‫Portanto, não precisamos mais desses dois.
‫Ok, e este é realmente
‫um GET, e também vamos salvá-lo nos comentários.
‫Obtenha todos os comentários.
‫E isso deve ser o suficiente para começarmos e
‫ver realmente todas as nossas análises.
‫Ok, e aqui vamos nós.
‫Vamos dar uma olhada na bússola e,
‫para ver as análises aqui, precisamos
‫prosseguir e recarregar todo o
‫banco de dados, mas agora, quando chegarmos às Avaliações
‫aqui, realmente veremos nossas duas análises que também foram criadas.
‫OK.
‫Agora, como fazemos para que
‫realmente vejamos o usuário e os dados do tour
‫aqui, em vez de simplesmente os IDs?
‫Bem, é claro que precisamos usar populate novamente.
‫Direito?
‫E isso é exatamente o que faremos
‫no próximo vídeo.