‫Instrutor: Tudo bem, nesta aula,
‫vamos falar sobre algo chamado
‫de rotas aninhadas, o que são,
‫por que precisamos delas
‫e como podemos realmente implementá-las no Express.
‫Vamos pensar por um segundo
‫como, na prática, queremos criar uma nova revisão.
‫Até este ponto, ao criar novas revisões, sempre passamos
‫manualmente o ID do tour e
‫o ID do usuário no corpo da solicitação
‫e, em seguida, criamos a revisão a partir daí, certo.
‫Tudo bem durante o desenvolvimento, mas é claro que não
‫é assim que uma revisão será
‫criada no mundo real.
‫Portanto, no mundo real, o ID
‫do usuário deve vir do usuário conectado no momento
‫e um ID do tour deve vir do tour atual.
‫Idealmente, isso deve ser codificado
‫bem na rota, ou seja, na URL.
‫Ao enviar uma solicitação de postagem para
‫uma nova revisão, queremos enviar para um URL como este.
‫Vamos escrever isso aqui apenas como um comentário.
‫O ideal é que a gente
‫queira fazer um pedido de postagem, de tour, e o ID
‫do tour, não importa muito aqui, e depois revisões.
‫Ok, agora, assim, temos o ID
‫do tour direto no URL e o
‫ID do usuário também virá do
‫usuário conectado no momento.
‫O que vemos aqui agora é uma chamada rota aninhada.
‫Eles fazem muito sentido quando há
‫uma relação clara entre pais e filhos entre os recursos.
‫Esse é claramente o caso aqui, certo.
‫Resenhas são claramente fruto da turnê.
‫Essa rota aninhada
‫basicamente significa acessar o recurso
‫de avaliações no recurso do passeio, tudo bem.
‫Da mesma forma, também queremos acessar
‫as avaliações de um determinado tour da mesma maneira.
‫Digamos então uma solicitação get, e
‫novamente para tour slash tour ID e revisões slash.
‫Idealmente, isso nos proporcionaria
‫todos os comentários sobre esse passeio.
‫Poderíamos ir ainda mais longe
‫e também especificar o ID da revisão.
‫Então, novamente, apenas uma string aleatória aqui,
‫mas você entendeu.
‫Nesse caso, obteríamos revisão com
‫o ID disso
‫aqui no tour com esse ID.
‫É disso que tratam as rotas aninhadas.
‫Esta é uma maneira mais fácil de ler
‫e entender como a API funciona para nossos usuários da API.
‫É muito mais fácil do que brincar
‫com strings de consulta e todas essas coisas assim.
‫Além disso, realmente mostra
‫como existe essa relação clara entre esses
‫recursos, novamente, avaliações e passeios.
‫Tudo bem, mas chega de conversa.
‫Agora vamos realmente implementar isso começando
‫com a rota do post.
‫Agora, como a rota realmente começa com tours, ela será
‫redirecionada para o nosso roteador de tours.
‫Teremos que implementar essa funcionalidade pelo menos por agora,
‫no roteador de tour, embora isso
‫pareça um pouco contra-intuitivo, já que estamos,
‫na verdade, lidando com revisões.
‫Mas, novamente, por enquanto, vamos implementá-lo assim.
‫Chegamos ao nosso roteador de usuário e primeiro,
‫já que vamos usar
‫análises aqui,
‫precisamos importar o controlador de análises.
‫Requer controlador.
‫Talvez eu devesse apenas ter copiado a linha de antes.
‫Controladores e revisão do controlador.
‫Tudo bem, agora aqui no final, e vamos realmente
‫pegar nosso código para
‫este exemplo aqui apenas como
‫uma referência.
‫Para que agora possamos realmente implementá-lo.
‫A rota que vamos implementar aqui
‫é a barra de ID e, em seguida, analisa.
‫Essa parte do tour aqui, como vocês
‫já sabem, é onde
‫montamos esse roteador e portanto, não precisamos repetir aqui.
‫Mas então, temos o ID do tour e, em seguida, reduzimos os comentários.
‫Para deixar isso bem claro,
‫vamos chamá-lo de tour ID, pois
‫agora estamos lidando
‫com diferentes recursos aqui.
‫Portanto, é um pouco mais claro chamá-lo do que realmente é.
‫Agora queremos implementar a revisão de criação.
‫Authcontroller dot protect.
‫Também queremos restringir o acesso apenas aos
‫usuários e, claro, nosso controlador de revisão ponto criar
‫revisão, tudo bem.
‫Novamente, é um pouco estranho e contra-intuitivo
‫chamar o controlador de revisão aqui na
‫rota do usuário.
‫Bem, na verdade, não deve estar na rota do usuário.
‫Por algum motivo, abri as
‫rotas do usuário e não as rotas do tour, sinto muito por isso.
‫Vamos cortar a partir daqui, chegar às nossas rotas de turismo e
‫realmente fazer aqui na parte inferior.
‫Claro que também precisamos obter o controlador de revisão.
‫Portanto, agora devemos estar prontos para ir.
‫Esse foi um bug estúpido.
‫Mas de qualquer forma, o que
‫eu estava dizendo é que não faz muito
‫sentido chamar o controlador de revisão na rota do
‫tour, mas novamente, por enquanto, precisamos fazer
‫assim porque a rota começa com o tour.
‫É este roteador que será ativado.
‫No próximo vídeo, vamos consertar
‫isso, mas por enquanto, queremos apenas
‫fazer funcionar e
‫nos familiarizar com todo esse conceito de rotas aninhadas.
‫De qualquer forma, agora obtivemos nosso ID de passeio na rota, mas
‫é claro, precisamos
‫informar ao controlador que ele deve usar este ID de passeio
‫e também o ID do usuário conectado no momento.
‫Agora precisamos ir
‫em frente e atualizar nosso controlador de revisão
‫aqui mesmo na criação de revisão.
‫O que vamos fazer é isso.
‫Diremos que, se não houver solicitação ponto body ponto tour, basicamente,
‫se não especificarmos o ID do tour
‫e o corpo, queremos
‫defini-lo como sendo aquele que vem
‫da URL.
‫Req. Dot body dot tour é igual a request,
‫e agora lembre-se de como esse
‫parâmetro de URL está nos parâmetros de ponto de solicitação e,
‫claro, o nome do próprio parâmetro, então ID do tour.
‫Esta é a primeira parte e
‫a segunda, também precisamos fazer o mesmo com o usuário.
‫Se não houver um usuário de ponto de
‫solicitação ou, na verdade, o usuário de ponto de corpo de solicitação de solicitação,
‫bem, o usuário de ponto de corpo de solicitação
‫de ponto deve ser a ID de usuário de ponto de solicitação de ponto.
‫E, novamente, obtemos o usuário do
‫ponto de solicitação do middleware de proteção, e é isso.
‫Vamos apenas colocar um comentário aqui, rotas aninhadas.
‫Com isso, realmente fazemos com
‫que o usuário ainda possa especificar manualmente o
‫tour e a ID do usuário.
‫O que estamos
‫fazendo aqui é simplesmente defini-los quando não estão
‫lá ou quando não estão especificados no corpo da solicitação.
‫Isso deve ser o suficiente para testarmos agora.
‫Tudo bem, então vamos dar
‫uma olhada nos usuários que temos neste momento.
‫Temos esses dois
‫usuários regulares, o usuário de teste e o
‫Jonas aqui, mas esquecemos a senha dele.
‫Vamos excluir este
‫usuário e criar um novo.
‫Tudo bem, então no Compass, os usuários, e é
‫este aqui.
‫Vamos recriar esse usuário basicamente.
‫Tudo o que realmente precisamos são esses dois dados.
‫Na verdade, isso é se inscrever.
‫O mesmo nome, o
‫mesmo email e a mesma senha também.
‫Neste ponto, já estamos logados como este
‫usuário, o chamado Jonas, vamos manter isso em mente.
‫Em seguida, precisamos escolher em qual
‫tour queremos criar a revisão.
‫Vamos fazer isso de novo aqui no
‫The Forest Hiker para que recebamos várias avaliações no mesmo passeio.
‫O que
‫vamos fazer agora é basicamente acessar aquela rota aninhada
‫que acabamos de criar.
‫Temos os passeios.
‫Agora precisamos obter o ID do tour
‫e, novamente, usaremos este para
‫The Forest
‫Hiker e, em seguida, reduzir as avaliações e, em seguida,
‫lembrar de uma postagem.
‫Em seguida, também precisamos especificar a autorização, então
‫o token do portador, e agora no corpo, tudo o que
‫realmente precisamos é
‫especificar a classificação e a revisão.
‫A avaliação
‫é cinco e algum texto aqui.
‫Portanto, isso já deve ser suficiente para experimentar.
‫Vamos mandar.
‫Agora não temos permissão para realizar
‫essa ação, por algum motivo, o que é estranho.
‫Nós nos inscrevemos como este Jonas, e na verdade
‫ele é apenas um usuário normal
‫como deveria ser.
‫Vamos dar uma olhada em nosso roteador.
‫Aqui, tudo bem, é usuário, não usuários.
‫Um pequeno bug como esse pode, como você
‫pode ver, travar toda a rota, então vamos tentar novamente agora.
‫E agora temos a revisão final
‫com o tour e o usuário definidos corretamente.
‫Pelo menos eu espero que sim.
‫O tour ID, você vê, termina aqui em 951 e,
‫portanto, é exatamente o mesmo aqui.
‫O usuário é este 1f3 e, de fato, é
‫exatamente o mesmo.
‫Tudo bem, agora devemos ser capazes
‫de confirmar isso, e este tour get
‫aqui já é aquele em que estávamos
‫criando a nova revisão.
‫Vamos dar uma olhada e, de fato,
‫agora temos duas análises.
‫Este é o que acabamos de criar.
‫Fica no tour correto e claro,
‫também o usuário correto com o nome de Jonas.
‫Incrível, isso é muito legal.
‫Vamos salvar isso.
‫Vou criar uma nova pasta aqui novamente.
‫Vou chamá-lo de tours e críticas.
‫Agora aqui, vamos
‫criar, criar uma nova revisão no tour.
‫Isso deveria ser realmente do lado de fora e assim.
‫Vamos realmente colocar esse aqui.
‫Realmente não funciona como deveria por algum motivo.
‫E aqui vamos nós.
‫Tudo bem, funcionou bem,
‫mas, como mencionei antes, a implementação
‫é um pouco confusa neste ponto.
‫E, novamente, isso ocorre porque tecnicamente definimos uma rota
‫de revisão no roteador de tour.
‫Isso é um pouco confuso e, portanto, no
‫próximo vídeo, vamos consertar isso.