﻿1
00:00:00,980 --> 00:00:02,560
‫Narrador: Neste vídeo,

2
00:00:02,560 --> 00:00:05,490
‫usaremos um truque simples para evitar que

3
00:00:05,490 --> 00:00:08,750
‫os usuários escrevam várias revisões para os mesmos

4
00:00:08,750 --> 00:00:11,323
‫passeios, evitando basicamente revisões duplicadas.

5
00:00:12,930 --> 00:00:16,140
‫Então, no último vídeo, criamos todas essas

6
00:00:16,140 --> 00:00:18,500
‫análises para calcular as médias.

7
00:00:18,500 --> 00:00:21,400
‫E criamos vários comentários para um tour,

8
00:00:21,400 --> 00:00:23,630
‫mas todos do mesmo usuário.

9
00:00:23,630 --> 00:00:27,590
‫Mas, na prática, isso não faz muito sentido, certo?

10
00:00:27,590 --> 00:00:29,700
‫Portanto, no mundo real, cada

11
00:00:29,700 --> 00:00:32,510
‫usuário deve revisar cada tour apenas uma vez.

12
00:00:32,510 --> 00:00:35,670
‫Basicamente, uma revisão duplicada ocorre quando há uma

13
00:00:35,670 --> 00:00:38,330
‫revisão com o mesmo usuário e o

14
00:00:38,330 --> 00:00:40,060
‫mesmo ID de tour.

15
00:00:40,060 --> 00:00:43,580
‫E é isso que queremos evitar que aconteça.

16
00:00:43,580 --> 00:00:45,410
‫E a solução óbvia

17
00:00:45,410 --> 00:00:48,470
‫aqui é apenas usar um índice exclusivo, certo?

18
00:00:48,470 --> 00:00:50,780
‫No entanto, não é suficiente

19
00:00:50,780 --> 00:00:53,120
‫definir esses dois campos como exclusivos.

20
00:00:53,120 --> 00:00:55,770
‫E, na verdade, isso seria realmente

21
00:00:55,770 --> 00:01:00,240
‫muito errado, porque significaria que cada tour pode receber apenas uma revisão

22
00:01:00,240 --> 00:01:03,570
‫e cada usuário pode escrever apenas uma revisão.

23
00:01:03,570 --> 00:01:06,150
‫E obviamente não é isso que queremos.

24
00:01:06,150 --> 00:01:09,900
‫Então, o que precisamos é que os dois juntos sejam

25
00:01:09,900 --> 00:01:14,150
‫únicos, para que a combinação de usuário e tour seja sempre única.

26
00:01:14,150 --> 00:01:17,460
‫Parece um pouco complicado, mas, felizmente para

27
00:01:17,460 --> 00:01:21,170
‫nós, é muito fácil de conseguir com índices.

28
00:01:21,170 --> 00:01:24,860
‫Já criamos um índice composto no tour antes, e agora

29
00:01:24,860 --> 00:01:27,523
‫vamos fazer o mesmo aqui nas revisões.

30
00:01:28,660 --> 00:01:32,400
‫Então, novamente, bem aqui após a definição do

31
00:01:32,400 --> 00:01:36,513
‫esquema e, claro, ainda estamos no modelo de revisão, certo?

32
00:01:38,210 --> 00:01:41,450
‫Portanto, revise, e isso não está correto,

33
00:01:41,450 --> 00:01:44,800
‫revise o índice de pontos do esquema ...

34
00:01:47,740 --> 00:01:51,530
‫Tour definido como um e, mais uma vez, não é realmente importante se for

35
00:01:51,530 --> 00:01:53,563
‫um ou menos um neste caso.

36
00:01:55,310 --> 00:01:58,180
‫E o usuário também definido como um, ok.

37
00:01:58,180 --> 00:02:00,940
‫E, novamente, é semelhante ao que

38
00:02:00,940 --> 00:02:03,980
‫fizemos antes, mas aqui vamos levá-lo para o

39
00:02:03,980 --> 00:02:07,140
‫próximo nível e agora adicionar um objeto para opções.

40
00:02:07,140 --> 00:02:10,109
‫E a opção aqui que vamos definir é

41
00:02:10,109 --> 00:02:11,350
‫única (digitação) definida

42
00:02:11,350 --> 00:02:12,373
‫como verdadeira.

43
00:02:15,010 --> 00:02:16,240
‫E é isso mesmo.

44
00:02:16,240 --> 00:02:18,700
‫Isso vai conseguir exatamente o que queremos.

45
00:02:18,700 --> 00:02:21,290
‫Portanto, agora cada combinação de tour e usuário

46
00:02:21,290 --> 00:02:22,903
‫deve ser sempre única.

47
00:02:23,780 --> 00:02:26,050
‫Então, vamos salvá-lo aqui,

48
00:02:26,050 --> 00:02:29,640
‫ou dois, e depois testá-lo de verdade.

49
00:02:29,640 --> 00:02:31,360
‫Agora, quando eu testei isso

50
00:02:31,360 --> 00:02:33,550
‫pela primeira vez, na verdade não funcionou imediatamente.

51
00:02:33,550 --> 00:02:36,530
‫Na verdade, só começou a funcionar no dia seguinte, e

52
00:02:36,530 --> 00:02:39,610
‫não tenho certeza do porquê, mas se isso acontecer com

53
00:02:39,610 --> 00:02:41,910
‫você, não se preocupe com isso, ok.

54
00:02:41,910 --> 00:02:43,840
‫E talvez possa até acontecer agora, enquanto

55
00:02:43,840 --> 00:02:45,240
‫estou gravando este vídeo.

56
00:02:46,080 --> 00:02:49,970
‫De qualquer forma, no momento, não deve haver nenhuma crítica sobre a

57
00:02:49,970 --> 00:02:51,963
‫turnê em que estávamos trabalhando.

58
00:02:52,810 --> 00:02:57,110
‫Então, só para ter certeza de que ainda temos zero

59
00:02:57,110 --> 00:03:01,010
‫avaliações e também que as avaliações estão vazias.

60
00:03:01,010 --> 00:03:02,840
‫E então vamos agora mais

61
00:03:02,840 --> 00:03:05,223
‫uma vez criar uma nova revisão neste tour.

62
00:03:06,720 --> 00:03:07,553
‫OK.

63
00:03:09,800 --> 00:03:13,490
‫Portanto, esta é uma revisão, um usuário e uma revisão.

64
00:03:13,490 --> 00:03:17,660
‫É claro que isso deve funcionar, mas se eu

65
00:03:17,660 --> 00:03:22,000
‫enviar novamente e digamos que configurei para quatro e diga

66
00:03:22,000 --> 00:03:25,290
‫ok, então isso não deveria funcionar, ok.

67
00:03:25,290 --> 00:03:27,310
‫Lembre-se de que ainda pode funcionar

68
00:03:27,310 --> 00:03:30,170
‫devido ao problema que eu estava lhe contando antes.

69
00:03:30,170 --> 00:03:34,253
‫Então, às vezes, esse tipo de índice não é definido imediatamente.

70
00:03:35,850 --> 00:03:39,120
‫Oh, mas na verdade, no meu caso aqui funcionou imediatamente.

71
00:03:39,120 --> 00:03:43,307
‫Portanto, obtemos esse erro de chave duplicada neste índice aqui, e

72
00:03:43,307 --> 00:03:47,210
‫esse é exatamente o índice que acabamos de criar.

73
00:03:47,210 --> 00:03:50,063
‫Então, vamos dar uma olhada nisso também aqui no Compass.

74
00:03:52,090 --> 00:03:54,153
‫Então aqui realmente não está,

75
00:03:55,547 --> 00:03:57,970
‫então farei exatamente como fiz antes

76
00:03:57,970 --> 00:03:59,873
‫e reconectarei basicamente.

77
00:04:04,210 --> 00:04:07,893
‫Então, indo para os recentes, então conectando aqui.

78
00:04:12,240 --> 00:04:13,360
‫Natours ...

79
00:04:16,760 --> 00:04:17,593
‫Então...

80
00:04:19,390 --> 00:04:20,453
‫Claro que os

81
00:04:21,520 --> 00:04:24,690
‫passeios e nossos índices aqui agora são esses quatro.

82
00:04:24,690 --> 00:04:26,640
‫E então esse é o

83
00:04:26,640 --> 00:04:29,920
‫que acabamos de criar, ou na verdade não é (risos), certo.

84
00:04:29,920 --> 00:04:32,290
‫Então, por algum motivo, não está aqui, então

85
00:04:32,290 --> 00:04:34,400
‫é isso que eu estava dizendo

86
00:04:34,400 --> 00:04:38,083
‫antes, mas não se importe porque na verdade está funcionando em nosso código.

87
00:04:39,840 --> 00:04:43,510
‫Ok, então não foi possível criar dois

88
00:04:43,510 --> 00:04:46,220
‫comentários vindos do mesmo usuário.

89
00:04:46,220 --> 00:04:48,480
‫Mas se você agora logar

90
00:04:48,480 --> 00:04:52,740
‫como outra pessoa, bem, então certamente poderemos postar este comentário.

91
00:04:52,740 --> 00:04:55,530
‫Então, vamos ver qual usuário podemos usar agora.

92
00:04:55,530 --> 00:04:58,973
‫Então vamos trazer todos os usuários aqui, o

93
00:05:01,160 --> 00:05:04,970
‫que não posso porque não sou um administrador (risos), ok.

94
00:05:04,970 --> 00:05:07,070
‫Então, esqueci essa

95
00:05:07,070 --> 00:05:10,500
‫parte e vou simplesmente recuperá-la do Compass.

96
00:05:10,500 --> 00:05:12,003
‫Às vezes isso é mais fácil.

97
00:05:13,230 --> 00:05:15,410
‫Então isso é um guia,

98
00:05:15,410 --> 00:05:19,443
‫um usuário (exclama), então vamos usar esse Eduardo aqui ou algo assim.

99
00:05:22,120 --> 00:05:26,943
‫Então, vamos fazer login como essa pessoa, como esse usuário.

100
00:05:31,120 --> 00:05:34,270
‫Sim, com sucesso, e agora devemos ter

101
00:05:34,270 --> 00:05:39,000
‫permissão para criar uma revisão e, de fato, aqui está, ok.

102
00:05:39,000 --> 00:05:40,483
‫E se

103
00:05:41,720 --> 00:05:45,970
‫agora atualizarmos isso, teremos nossas duas classificações, ótimo.

104
00:05:45,970 --> 00:05:48,620
‫Agora, apenas testando novamente, então se

105
00:05:48,620 --> 00:05:51,510
‫enviarmos novamente, não vai funcionar porque, novamente,

106
00:05:51,510 --> 00:05:53,530
‫temos um erro duplicado.

107
00:05:53,530 --> 00:05:54,640
‫Impressionante.

108
00:05:54,640 --> 00:05:57,110
‫Há apenas mais uma coisa que

109
00:05:57,110 --> 00:06:00,693
‫gostaria de mostrar a vocês e, para isso, vou efetuar

110
00:06:03,040 --> 00:06:07,300
‫login como outra pessoa, ok, para que então possa criar outra revisão.

111
00:06:07,300 --> 00:06:10,523
‫Então, desta vez, vou ser esse Max Smith.

112
00:06:12,150 --> 00:06:14,203
‫E então vamos fazer login.

113
00:06:17,140 --> 00:06:18,420
‫(cliques do

114
00:06:18,420 --> 00:06:21,350
‫mouse) Ok, agora sou oficialmente o Max

115
00:06:21,350 --> 00:06:23,973
‫e poderei postar esse comentário.

116
00:06:27,500 --> 00:06:28,453
‫Então, com

117
00:06:30,840 --> 00:06:32,210
‫cinco, sou capaz de fazer

118
00:06:32,210 --> 00:06:35,123
‫isso e agora quero dar uma olhada na média.

119
00:06:36,080 --> 00:06:40,660
‫Ok, agora é este 4. 6666, o que

120
00:06:40,660 --> 00:06:43,040
‫obviamente não parece bom.

121
00:06:43,040 --> 00:06:45,090
‫E podemos consertar isso no front end.

122
00:06:45,090 --> 00:06:47,330
‫Por exemplo, quando solicitamos esses dados da

123
00:06:47,330 --> 00:06:49,490
‫API e depois os exibimos,

124
00:06:49,490 --> 00:06:52,010
‫poderíamos no front end fazer esse arredondamento.

125
00:06:52,010 --> 00:06:55,260
‫Mas, na verdade, quero fazer isso aqui no back-end

126
00:06:55,260 --> 00:06:59,250
‫para que o usuário final já obtenha esse valor arredondado final,

127
00:06:59,250 --> 00:07:02,980
‫que neste caso seria 4. 7, certo?

128
00:07:02,980 --> 00:07:06,340
‫E para fazer isso, vou mostrar a você um pequeno

129
00:07:06,340 --> 00:07:09,230
‫recurso novo no Mongoose que ainda não usamos.

130
00:07:09,230 --> 00:07:12,323
‫Então, vamos para o nosso modelo de

131
00:07:13,220 --> 00:07:15,070
‫tour, e para essa média,

132
00:07:15,070 --> 00:07:16,410
‫bem aqui.

133
00:07:16,410 --> 00:07:19,132
‫E agora, podemos usar uma função setter.

134
00:07:19,132 --> 00:07:21,100
‫(digitando) Então configure e

135
00:07:21,100 --> 00:07:24,070
‫esta função será executada cada vez que um

136
00:07:24,070 --> 00:07:27,257
‫novo valor for configurado para este campo, ok.

137
00:07:27,257 --> 00:07:31,180
‫E aqui, geralmente especificamos uma função de retorno de chamada, que

138
00:07:31,180 --> 00:07:33,003
‫recebe o valor atual.

139
00:07:34,570 --> 00:07:37,610
‫E nesse caso, ele retorna basicamente esse valor,

140
00:07:37,610 --> 00:07:38,533
‫mas arredondado.

141
00:07:39,760 --> 00:07:44,760
‫Portanto, usamos o arredondamento de ponto matemático para o valor atual, mas o problema

142
00:07:46,040 --> 00:07:48,610
‫com o arredondamento de ponto matemático

143
00:07:48,610 --> 00:07:51,240
‫é que ele arredonda os valores para inteiros.

144
00:07:51,240 --> 00:07:54,253
‫Por exemplo, se tivéssemos algo

145
00:07:55,412 --> 00:07:58,830
‫assim, seria então arredondado para cinco, certo.

146
00:07:58,830 --> 00:08:00,410
‫E não é isso que queremos.

147
00:08:00,410 --> 00:08:03,610
‫Queremos que seja arredondado para 4. 7

148
00:08:03,610 --> 00:08:05,310
‫Então, vamos usar

149
00:08:05,310 --> 00:08:10,037
‫um truque aqui, que é bastante comum, multiplicar isso por 10

150
00:08:10,037 --> 00:08:13,647
‫e, com isso, teríamos 46. 666, e

151
00:08:14,580 --> 00:08:17,960
‫esse arredondado seria 47.

152
00:08:17,960 --> 00:08:21,120
‫E então, dividimos os resultados por 10 novamente, e isso

153
00:08:21,120 --> 00:08:22,810
‫dá 4. 7

154
00:08:26,470 --> 00:08:29,180
‫Tudo bem, e é isso mesmo.

155
00:08:29,180 --> 00:08:31,790
‫Então, novamente, uma função setter aqui que será

156
00:08:31,790 --> 00:08:34,710
‫executada toda vez que houver um novo valor para

157
00:08:34,710 --> 00:08:36,903
‫o campo de média de classificações.

158
00:08:38,640 --> 00:08:42,650
‫Então, apenas para testar isso, vamos simplesmente atualizar esta

159
00:08:42,650 --> 00:08:45,743
‫última revisão que adicionamos, que tinha um

160
00:08:49,080 --> 00:08:52,030
‫cinco, e vamos mantê-lo em cinco.

161
00:08:52,030 --> 00:08:54,830
‫Basicamente, tudo o que queremos fazer é executar

162
00:08:54,830 --> 00:08:57,283
‫novamente a função que cria essa média.

163
00:08:59,490 --> 00:09:02,910
‫Então, se eu fizer isso agora e fizer meu tour,

164
00:09:02,910 --> 00:09:05,853
‫devemos conseguir 4. 7 aqui como a média.

165
00:09:06,780 --> 00:09:09,620
‫E sim, aqui vamos nós.

166
00:09:09,620 --> 00:09:13,210
‫Ótimo, e na verdade já é isso para este vídeo.

167
00:09:13,210 --> 00:09:15,940
‫Por isso, criamos essa função configuradora bacana

168
00:09:15,940 --> 00:09:18,940
‫e esse índice composto exclusivo aqui para garantir

169
00:09:18,940 --> 00:09:21,000
‫que um usuário não

170
00:09:21,000 --> 00:09:24,053
‫possa escrever várias avaliações para o mesmo tour.

