‫-: Bem-vindo de volta ao último vídeo da seção.
‫E nesta seção nós meio que finalizamos nosso projeto,
‫tanto a API quanto o site renderizado, pelo
‫menos por enquanto.
‫Então, mais uma vez, parabéns por chegar a este ponto e por
‫ficar sentado por mais de 30 horas de vídeo, sempre
‫ouvindo minha voz.
‫De qualquer forma, neste último
‫vídeo, eu queria abordar rapidamente alguns
‫tópicos que poderíamos ter adicionado à API e ao
‫site, e basicamente deixá-los como desafios para você,
‫se quiser.
‫Portanto, poderíamos ter adicionado um pouco mais de
‫lógica de negócios ao nosso projeto, por
‫exemplo, adicionando uma restrição de que os usuários só podem revisar um
‫tour que realmente reservaram.
‫E isso faria muito sentido, certo?
‫Então, eu quero que você experimente por
‫conta própria, se quiser.
‫Agora, esses desafios eu não vou resolver
‫sozinho, a menos que realmente haja muita demanda para um deles.
‫E, na verdade,
‫deixei esse tipo de desafio mais complicado
‫para os alunos fazerem por conta própria em meus
‫outros cursos, e realmente vi alguns resultados criativos em muitos casos.
‫Espero que você também experimente alguns deles.
‫Agora, de qualquer maneira, a
‫seguir, você também pode implementar algumas rotas de reserva
‫aninhadas, por exemplo, obter todas as reservas para um
‫determinado passeio e obter todas as reservas para um
‫determinado usuário, com base em ids.
‫Além disso, você poderia melhorar drasticamente as datas da turnê, e o que
‫quero dizer com isso é que você poderia adicionar um campo de
‫participantes e um campo soldOut a cada uma das datas.
‫E a data então se
‫torna uma espécie de exemplo da turnê.
‫Então, quando um usuário realmente reserva um
‫passeio, ele precisa selecionar uma das datas disponíveis
‫e, em seguida, sua
‫reserva em uma das datas aumentará
‫o número de participantes na data até que
‫seja esgotada, basicamente, quando os participantes são maiores do
‫que o tamanho máximo do grupo.
‫Agora, finalmente, é claro, quando o usuário
‫deseja reservar um determinado tour em uma
‫determinada data, você precisa verificar se o tour ainda está
‫disponível na data selecionada.
‫OK?
‫Portanto, esse é um desafio bastante sofisticado,
‫mas também muito divertido de implementar,
‫e realmente adicionaria uma lógica de negócios significativa
‫a este projeto.
‫Finalmente, você também pode implementar alguns
‫dos recursos de autenticação avançada sobre
‫os quais já falamos um pouco antes
‫na seção de segurança.
‫Por exemplo, você pode confirmar o endereço de e-mail de
‫um usuário basicamente enviando a ele um e-mail com
‫um link no
‫qual ele precisa clicar
‫e, somente após o clique, o usuário estará realmente cadastrado
‫no aplicativo e poderá fazer coisas como comprar passeios.
‫Além disso, você pode manter os
‫usuários conectados com algo chamado tokens de atualização.
‫E isso é um pouco complicado de implementar,
‫mas se você pesquisar no Google sobre como isso
‫funciona, tenho certeza que pode encontrar
‫uma boa solução ou também pode encontrar uma por conta própria.
‫Por fim, você também pode implementar a autenticação de
‫dois fatores, mas este é um passo adiante.
‫Então, basicamente, quando um usuário
‫faz login, ele recebe algo como uma mensagem
‫de texto em seu telefone com um
‫código que precisa ser
‫colocado no aplicativo para ser autenticado após a segunda etapa.
‫Então, esses são alguns desafios legais
‫que você pode realmente implementar no site da API,
‫basicamente do projeto.
‫Mas também há coisas que você pode fazer no site.
‫Por exemplo, você pode implementar o formulário de inscrição, que
‫deve ser muito semelhante ao formulário de login.
‫Não fiz isso porque é muito semelhante
‫ao formulário
‫de login e não queria perder tempo fazendo isso.
‫Mas é claro que você pode ir em
‫frente e implementar esse também.
‫Outra coisa legal que você pode fazer no site é
‫que, na página de detalhes do tour,
‫você pode permitir
‫que um usuário adicione uma avaliação diretamente no
‫site, mas apenas se o usuário tiver feito esse tour.
‫Portanto, você teria que verificar se o usuário
‫atualmente conectado realmente reservou o passeio
‫atual e também se o tempo do passeio já passou.
‫E se sim, então você pode adicionar um formulário
‫à página onde o usuário pode
‫adicionar uma nova revisão, por exemplo, usando nossa API de revisão.
‫Ou também, e este está um pouco relacionado,
‫você pode ocultar toda a seção de
‫reserva na mesma página de detalhes do passeio se o
‫usuário atual reservou o passeio.
‫OK.
‫Isso evitaria que o mesmo usuário reservasse o
‫mesmo passeio duas vezes.
‫E, como você já está fazendo isso no
‫front-end, também deve evitar reservas
‫duplicadas no back-end do seu modelo.
‫Na verdade, isso será
‫muito semelhante a evitar revisões duplicadas do mesmo usuário.
‫OK.
‫Além disso, você
‫pode implementar uma funcionalidade de passeio muito boa.
‫Então, quando você tem algo como um
‫botão de curtir ou um coração
‫no tour, e quando o
‫usuário clica nele, ele é adicionado aos favoritos.
‫E então no
‫site, você pode ter uma página de favoritos ou apenas um painel de favoritos onde
‫o usuário pode ver todos os seus passeios favoritos.
‫Então essa não é realmente
‫difícil, mas acho muito divertida de implementar.
‫Em seguida, na página da conta do
‫usuário, você pode implementar a página Minhas
‫revisões, que já tem um
‫link agora, e nessa página o usuário
‫pode ver e talvez também editar e excluir todas as suas próprias revisões.
‫Agora, se você conhece React, então
‫esta seria realmente uma maneira incrível de
‫usar a API Natours e também treinar suas habilidades de React
‫ao mesmo tempo.
‫E depois de fazer isso com o
‫React, você pode recriar a página inteira como um
‫aplicativo de página única com o React
‫ou algo assim.
‫Assim, como Angular ou Vue também funcionaria para isso.
‫Direito.
‫Seria ótimo se você fizesse
‫isso, e eu realmente adoraria ver isso implementado.
‫Finalmente, para os administradores, você pode
‫implementar as páginas Gerenciar, onde
‫os administradores podem criar, ler, atualizar e excluir
‫todos os recursos, ou
‫seja, todos os passeios, usuários, avaliações e reservas.
‫Mais uma vez, React seria uma boa opção
‫para isso, ou se não, apenas
‫o Javascript regular no front end também
‫funcionaria muito bem, por exemplo, atualizar todos esses recursos usando chamadas Ajax.
‫Portanto, há realmente uma tonelada de coisas que você
‫poderia implementar para melhorar ainda mais nosso
‫projeto e nosso site.
‫Direito?
‫E tenho certeza de que
‫você poderia até mesmo pensar em outras coisas aqui.
‫Então, novamente, seria realmente
‫incrível ver alguns desses recursos realmente implementados por você.
‫E se você fizer um deles ou até mais,
‫certifique-se de compartilhar seu resultado na seção de
‫perguntas e respostas do curso.
‫Enfim, é isso para este vídeo e para esta seção
‫e também quase para este curso.
‫Então, ótimo trabalho mais uma vez e agora a seguir, tudo
‫o que realmente resta a fazer é preparar
‫o aplicativo para implantação e,
‫em seguida, implantá-lo em um servidor de produção ao vivo para realmente
‫compartilhar nosso projeto com o mundo.