‫Instrutor: Neste vídeo, vamos continuar a
‫traduzir o modelo de dados que estabelecemos bem
‫no início da seção em algum código real.
‫E então, desta vez, vamos implementar o modelo de avaliações.
‫Portanto, a primeira etapa é criar um novo arquivo na
‫pasta de modelos e chamá-lo de ReviewModel. js.
‫E para mim, esse parece ser mais um grande desafio
‫para você praticar algumas das
‫habilidades que já aprendeu até agora.
‫Ok, então, neste desafio, quero que você crie o
‫modelo de revisão.
‫E o que precisamos é realmente muito simples.
‫Deixe-me colocar isso aqui em um comentário.
‫Basicamente, queremos uma revisão,
‫então o texto da revisão.
‫Queremos uma
‫classificação assim como esta.
‫Em seguida, também queremos um createdAt so com
‫o carimbo de data
‫/ hora atual e também queremos uma referência ao tour ao
‫qual esta revisão
‫pertence e também ao usuário que a escreveu.
‫Ok, basicamente duas referências de pais aqui, certo.
‫E assim, com o que você
‫aprendeu nas últimas aulas,
‫você deve ser capaz de completar este
‫desafio completamente sozinho.
‫Então, pause o vídeo agora e boa sorte com isso.
‫Agora, ok, então espero que você não tenha simplesmente
‫ignorado isso e, em vez disso, você realmente o implementou por si mesmo
‫e, de qualquer forma, foi assim que eu o criei.
‫Portanto, é claro, precisamos começar exigindo o mangusto e, em
‫seguida, o
‫reviewSchema é igual ao novo mangusto. Esquema.
‫E então vamos começar a adicionar nossos campos.
‫Portanto, primeiro, a revisão é, obviamente, uma string.
‫Agora, certo e claro, estou fazendo isso muito
‫rápido, então eu também preciso especificar o
‫tipo e então vamos também
‫definir
‫como obrigatório, verdadeiro, a revisão não pode estar vazia.
‫Então queremos uma classificação,
‫e esta é do tipo número.
‫E a classificação idealmente é entre um e cinco.
‫E assim, o mínimo de um e o máximo são cinco.
‫Como você
‫já sabe, esses são alguns validadores simples.
‫Isso funciona apenas para números, certo.
‫Isso não está correto aqui.
‫OK.
‫Em seguida, o createdAt.
‫Isso é do tipo,
‫data e, por padrão, queremos
‫Data. agora.
‫OK.
‫Então essa foi a parte fácil.
‫E vamos criar um modelo
‫e exportá-lo antes de adicionar essas referências.
‫Então const, Review is
‫equal too mongoose. modelo com o
‫nome Review.
‫E então, claro, reviewSchema.
‫Para finalizar o módulo do curso. exportar
‫é igual a Review.
‫Tudo bem, agora vem a parte de referência.
‫Portanto, uma revisão de curso precisa pertencer a um tour.
‫E também precisa de um autor.
‫OK.
‫Então, isso é novamente o que
‫especificamos em nossa aula de modelagem de dados.
‫Então, basicamente, íamos implementar
‫a referência dos pais aqui neste caso.
‫Porque tanto o tour quanto o usuário são, de
‫certa forma, os pais desse conjunto de dados.
‫E decidimos fazer desta
‫forma porque vamos
‫apagar potencialmente todos os elementos pais, certo?
‫Portanto, não devemos projetar nosso
‫aplicativo pensando que haverá apenas alguns comentários.
‫Só para então voltar a ele depois de algum
‫tempo e descobrir que nossas suposições estavam erradas.
‫E agora precisamos reconstruir todo o nosso modelo de dados.
‫Então isso seria terrível.
‫Então, em muitas situações, como você já sabe
‫o que realmente não sabemos, o quanto nosso apagamento vai crescer.
‫Então, é melhor optar pela referência dos pais.
‫Então, novamente, isso é exatamente o que estamos
‫fazendo aqui quando estamos referenciando o tour e o usuário.
‫Então, vamos prosseguir e implementar isso.
‫E começando com o tour.
‫Tudo bem.
‫Então, aqui precisamos de algum espaço e tudo bem.
‫Então, o tipo é como fazíamos antes, mangusto, e isso não
‫é correto.
‫Então mangusto. Esquema. ObjectId, com
‫O maiúsculo e I maiúsculo, mas não o D.
‫E só
‫estou dizendo isso porque uma vez escrevi um ID
‫assim e depois passei meia hora tentando descobrir
‫por que meu aplicativo não estava funcionando.
‫Ok, então este D precisa ser minúsculo.
‫De qualquer forma.
‫A referência neste caso é, claro, o tour.
‫E também queremos tornar isso obrigatório.
‫Tão verdadeiro e, em seguida, Review deve pertencer a
‫um tour.
‫OK.
‫E assim, cada documento de revisão agora
‫sabe exatamente a que tour pertence.
‫Embora o tour, é claro, não
‫saiba inicialmente quais Avaliações e quantas avaliações existem.
‫Mas é um problema
‫que resolveremos um pouco mais tarde.
‫OK.
‫Em seguida, quando houver uma Review, não queremos
‫apenas saber a que tour ela pertence,
‫mas também quem a escreveu.
‫Então,
‫usuário, e novamente, o mesmo
‫tipo de mangusto. Esquema. ObjectId, e desta
‫vez
‫a referência, como você pode imaginar, será o usuário.
‫Ok, e novamente tornamos isso obrigatório
‫porque, bem, uma revisão realmente não pode funcionar
‫sem um autor basicamente.
‫E, portanto, a
‫revisão deve pertencer a um usuário.
‫Ok, é realmente isso.
‫Tudo bem.
‫Agora, para terminar, vamos adicionar essas opções
‫ao Schema onde fazemos para que as propriedades virtuais
‫também apareçam nas saídas Json e de objetos.
‫OK.
‫Então fizemos isso antes nas turnês.
‫Não tenho certeza se fizemos isso no modelo do usuário.
‫De qualquer forma, aqui vamos precisar disso
‫um pouco mais tarde.
‫Portanto, precisamos especificar isso.
‫Lembre-se, basicamente o que quero dizer
‫é esta parte.
‫Então, na verdade, vou copiá-lo.
‫Só para nos poupar algum tempo.
‫E então, novamente, tudo o que isso faz é realmente garantir
‫que, quando temos uma propriedade virtual,
‫basicamente um campo que não é armazenado no banco
‫de dados, mas calculado usando algum outro valor.
‫Portanto, queremos que isso também apareça sempre que houver uma saída.
‫Certo, é isso que fazemos aqui.
‫OK.
‫E então eu realmente acho que é isso por agora.
‫Muito simples.
‫A única parte um pouco complicada é criar
‫essas referências aqui.
‫Mas já fizemos
‫isso antes e funciona exatamente da mesma maneira.
‫Portanto, no próximo vídeo, usaremos
‫o Schema para criar alguns novos comentários.
‫Então, vejo você então.