﻿1
00:00:00,980 --> 00:00:02,560
‫Narrador: En este

2
00:00:02,560 --> 00:00:05,490
‫video, usaremos un truco simple para evitar

3
00:00:05,490 --> 00:00:08,750
‫que los usuarios escriban múltiples reseñas para los

4
00:00:08,750 --> 00:00:11,323
‫mismos recorridos, básicamente evitando reseñas duplicadas.

5
00:00:12,930 --> 00:00:16,140
‫Entonces, en el último video, creamos todas estas

6
00:00:16,140 --> 00:00:18,500
‫revisiones para calcular los promedios.

7
00:00:18,500 --> 00:00:21,400
‫Y creamos varias reseñas para un recorrido,

8
00:00:21,400 --> 00:00:23,630
‫pero todas del mismo usuario.

9
00:00:23,630 --> 00:00:27,590
‫Pero en la práctica, eso no tiene mucho sentido, ¿verdad?

10
00:00:27,590 --> 00:00:29,700
‫Entonces, en el mundo real, cada

11
00:00:29,700 --> 00:00:32,510
‫usuario solo debe revisar cada recorrido una vez.

12
00:00:32,510 --> 00:00:35,670
‫Básicamente, una revisión duplicada ocurre cuando hay una

13
00:00:35,670 --> 00:00:38,330
‫revisión con el mismo usuario y el

14
00:00:38,330 --> 00:00:40,060
‫mismo ID de recorrido.

15
00:00:40,060 --> 00:00:43,580
‫Y eso es lo que queremos evitar que suceda.

16
00:00:43,580 --> 00:00:45,410
‫Y la solución obvia

17
00:00:45,410 --> 00:00:48,470
‫aquí es usar un índice único, ¿verdad?

18
00:00:48,470 --> 00:00:50,780
‫Sin embargo, no es

19
00:00:50,780 --> 00:00:53,120
‫suficiente establecer ambos campos como únicos.

20
00:00:53,120 --> 00:00:55,770
‫Y, en realidad, eso sería muy

21
00:00:55,770 --> 00:01:00,240
‫incorrecto, porque eso significaría que cada recorrido solo puede obtener una reseña,

22
00:01:00,240 --> 00:01:03,570
‫y cada usuario solo puede escribir una reseña.

23
00:01:03,570 --> 00:01:06,150
‫Y obviamente eso no es lo que queremos.

24
00:01:06,150 --> 00:01:09,900
‫Entonces, lo que sí necesitamos es que ambos juntos sean

25
00:01:09,900 --> 00:01:14,150
‫únicos, de modo que la combinación de usuario y recorrido sea siempre única.

26
00:01:14,150 --> 00:01:17,460
‫Eso suena un poco complicado, pero afortunadamente para

27
00:01:17,460 --> 00:01:21,170
‫nosotros, en realidad es muy fácil de lograr con índices.

28
00:01:21,170 --> 00:01:24,860
‫Entonces, ya creamos un índice compuesto en el recorrido antes, y ahora

29
00:01:24,860 --> 00:01:27,523
‫hagamos lo mismo aquí en las revisiones.

30
00:01:28,660 --> 00:01:32,400
‫Entonces, nuevamente, justo aquí después de la definición del esquema

31
00:01:32,400 --> 00:01:36,513
‫y, por supuesto, todavía estamos en el modelo de revisión, ¿verdad?

32
00:01:38,210 --> 00:01:41,450
‫Así que revise, y eso no es correcto,

33
00:01:41,450 --> 00:01:44,800
‫así que revise el índice de puntos del esquema ...

34
00:01:47,740 --> 00:01:51,530
‫Tour configurado en uno, y una vez más, no es realmente importante si es

35
00:01:51,530 --> 00:01:53,563
‫uno o menos uno en este caso.

36
00:01:55,310 --> 00:01:58,180
‫Y el usuario también configuró uno, de acuerdo.

37
00:01:58,180 --> 00:02:00,940
‫Y nuevamente, eso es similar a lo

38
00:02:00,940 --> 00:02:03,980
‫que hicimos antes, pero aquí lo llevaremos al siguiente

39
00:02:03,980 --> 00:02:07,140
‫nivel y ahora agregaremos un objeto para las opciones.

40
00:02:07,140 --> 00:02:10,109
‫Y la opción aquí que vamos a establecer

41
00:02:10,109 --> 00:02:11,350
‫es única (escritura) establecida

42
00:02:11,350 --> 00:02:12,373
‫en verdadero.

43
00:02:15,010 --> 00:02:16,240
‫Y eso es todo.

44
00:02:16,240 --> 00:02:18,700
‫Esto logrará exactamente lo que queremos.

45
00:02:18,700 --> 00:02:21,290
‫Así que ahora cada combinación de tour y usuario

46
00:02:21,290 --> 00:02:22,903
‫siempre tiene que ser única.

47
00:02:23,780 --> 00:02:26,050
‫Así que vamos a guardarlo

48
00:02:26,050 --> 00:02:29,640
‫aquí, o dos, y luego probarlo en realidad.

49
00:02:29,640 --> 00:02:31,360
‫Ahora, cuando probé esto por

50
00:02:31,360 --> 00:02:33,550
‫primera vez, en realidad no funcionó de inmediato.

51
00:02:33,550 --> 00:02:36,530
‫Realmente, recién comenzó a funcionar al día siguiente, y no estoy

52
00:02:36,530 --> 00:02:39,610
‫muy seguro de por qué, pero si eso le sucede a usted,

53
00:02:39,610 --> 00:02:41,910
‫entonces no se preocupe por eso, está bien.

54
00:02:41,910 --> 00:02:43,840
‫Y tal vez incluso podría suceder ahora

55
00:02:43,840 --> 00:02:45,240
‫mientras estoy grabando este video.

56
00:02:46,080 --> 00:02:49,970
‫De todos modos, en este momento, no debería haber reseñas sobre la

57
00:02:49,970 --> 00:02:51,963
‫gira en la que estábamos trabajando.

58
00:02:52,810 --> 00:02:57,110
‫Entonces, solo para asegurarnos de que todavía tengamos calificaciones

59
00:02:57,110 --> 00:03:01,010
‫cero y que las reseñas estén vacías.

60
00:03:01,010 --> 00:03:02,840
‫Y ahora, una vez más,

61
00:03:02,840 --> 00:03:05,223
‫creemos una nueva revisión en este recorrido.

62
00:03:06,720 --> 00:03:07,553
‫Bueno.

63
00:03:09,800 --> 00:03:13,490
‫Así que esta es una revisión, un usuario y una revisión.

64
00:03:13,490 --> 00:03:17,660
‫Entonces, por supuesto, debería funcionar, pero si ahora envío esto de nuevo

65
00:03:17,660 --> 00:03:22,000
‫y digamos que lo configuro en cuatro y digo que está bien, entonces

66
00:03:22,000 --> 00:03:25,290
‫no se debería permitir que funcione, está bien.

67
00:03:25,290 --> 00:03:27,310
‫Solo tenga en cuenta que aún podría

68
00:03:27,310 --> 00:03:30,170
‫funcionar debido al problema que le estaba contando antes, de acuerdo.

69
00:03:30,170 --> 00:03:34,253
‫Entonces, a veces, este tipo de índice no se configura de inmediato.

70
00:03:35,850 --> 00:03:39,120
‫Oh, pero en realidad, en mi caso aquí funcionó de inmediato.

71
00:03:39,120 --> 00:03:43,307
‫Entonces obtenemos este error de clave duplicada en este índice aquí, y

72
00:03:43,307 --> 00:03:47,210
‫ese es exactamente el índice que acabamos de crear antes.

73
00:03:47,210 --> 00:03:50,063
‫Así que echemos un vistazo a eso también aquí en Compass.

74
00:03:52,090 --> 00:03:54,153
‫Así que aquí no está, así

75
00:03:55,547 --> 00:03:57,970
‫que lo haré como lo hice antes y

76
00:03:57,970 --> 00:03:59,873
‫básicamente me volveré a conectar.

77
00:04:04,210 --> 00:04:07,893
‫Entonces yendo a los recientes, luego conectando aquí.

78
00:04:12,240 --> 00:04:13,360
‫Natours ...

79
00:04:16,760 --> 00:04:17,593
‫Luego...

80
00:04:19,390 --> 00:04:20,453
‫Por supuesto, los

81
00:04:21,520 --> 00:04:24,690
‫recorridos y nuestros índices aquí son ahora estos cuatro.

82
00:04:24,690 --> 00:04:26,640
‫Y ese es el que acabamos

83
00:04:26,640 --> 00:04:29,920
‫de crear, o en realidad no lo es (risas), está bien.

84
00:04:29,920 --> 00:04:32,290
‫Entonces, por alguna razón, no está aquí, así

85
00:04:32,290 --> 00:04:34,400
‫que eso es lo que estaba diciendo

86
00:04:34,400 --> 00:04:38,083
‫antes, pero no te preocupes porque en realidad está funcionando en nuestro código.

87
00:04:39,840 --> 00:04:43,510
‫De acuerdo, no pudimos crear dos reseñas

88
00:04:43,510 --> 00:04:46,220
‫del mismo usuario, de acuerdo.

89
00:04:46,220 --> 00:04:48,480
‫Pero si ahora inicia

90
00:04:48,480 --> 00:04:52,740
‫sesión como otra persona, entonces ciertamente podremos publicar esta reseña.

91
00:04:52,740 --> 00:04:55,530
‫Entonces, veamos qué usuario podemos usar ahora.

92
00:04:55,530 --> 00:04:58,973
‫Así que traigamos a todos los usuarios aquí, lo

93
00:05:01,160 --> 00:05:04,970
‫cual no puedo porque no soy un administrador (risas), está bien.

94
00:05:04,970 --> 00:05:07,070
‫Así que me olvidé de esa

95
00:05:07,070 --> 00:05:10,500
‫parte, así que simplemente voy a recuperar esto de Compass.

96
00:05:10,500 --> 00:05:12,003
‫A veces eso es más fácil.

97
00:05:13,230 --> 00:05:15,410
‫Así que esto es una guía,

98
00:05:15,410 --> 00:05:19,443
‫un usuario (exclama), así que usemos este Eduardo aquí o algo así.

99
00:05:22,120 --> 00:05:26,943
‫Así que iniciemos sesión como esta persona, como este usuario.

100
00:05:31,120 --> 00:05:34,270
‫Sí, con éxito, y ahora se nos

101
00:05:34,270 --> 00:05:39,000
‫debería permitir crear una revisión, y de hecho aquí está, está bien.

102
00:05:39,000 --> 00:05:40,483
‫Y si

103
00:05:41,720 --> 00:05:45,970
‫ahora actualizamos esto, entonces tenemos nuestras dos calificaciones, genial.

104
00:05:45,970 --> 00:05:48,620
‫Ahora solo lo probamos nuevamente, así que

105
00:05:48,620 --> 00:05:51,510
‫si lo enviamos nuevamente, no funcionará porque nuevamente,

106
00:05:51,510 --> 00:05:53,530
‫tenemos un error duplicado.

107
00:05:53,530 --> 00:05:54,640
‫Impresionante.

108
00:05:54,640 --> 00:05:57,110
‫Solo hay una cosa más que

109
00:05:57,110 --> 00:06:00,693
‫quería mostrarles, y para eso, voy a iniciar sesión

110
00:06:03,040 --> 00:06:07,300
‫como otra persona, está bien, para luego poder crear otra reseña.

111
00:06:07,300 --> 00:06:10,523
‫Así que esta vez, voy a ser este Max Smith.

112
00:06:12,150 --> 00:06:14,203
‫Así que iniciemos sesión.

113
00:06:17,140 --> 00:06:18,420
‫(clics del

114
00:06:18,420 --> 00:06:21,350
‫mouse) Bien, ahora soy oficialmente Max

115
00:06:21,350 --> 00:06:23,973
‫y podré publicar esta reseña.

116
00:06:27,500 --> 00:06:28,453
‫Entonces, con

117
00:06:30,840 --> 00:06:32,210
‫cinco, puedo hacer eso,

118
00:06:32,210 --> 00:06:35,123
‫y ahora quiero echar un vistazo al promedio.

119
00:06:36,080 --> 00:06:40,660
‫Bien, ahora mismo es este 4. 6666, que por

120
00:06:40,660 --> 00:06:43,040
‫supuesto no se ve bien.

121
00:06:43,040 --> 00:06:45,090
‫Y podríamos arreglar esto en la parte delantera.

122
00:06:45,090 --> 00:06:47,330
‫Por ejemplo, cuando solicitamos estos datos de

123
00:06:47,330 --> 00:06:49,490
‫la API y luego los mostramos,

124
00:06:49,490 --> 00:06:52,010
‫podríamos en la interfaz y luego hacer este redondeo.

125
00:06:52,010 --> 00:06:55,260
‫Pero en realidad, quiero hacerlo aquí mismo en el back-end

126
00:06:55,260 --> 00:06:59,250
‫para que el usuario final ya obtenga este valor redondeado final, que

127
00:06:59,250 --> 00:07:02,980
‫en este caso sería 4. 7, ¿verdad?

128
00:07:02,980 --> 00:07:06,340
‫Y para hacer eso, les mostraré una pequeña característica

129
00:07:06,340 --> 00:07:09,230
‫nueva en Mongoose que aún no usamos.

130
00:07:09,230 --> 00:07:12,323
‫Así que vayamos a nuestro modelo de

131
00:07:13,220 --> 00:07:15,070
‫gira, y a ese promedio,

132
00:07:15,070 --> 00:07:16,410
‫aquí mismo.

133
00:07:16,410 --> 00:07:19,132
‫Y ahora, podemos usar una función de establecimiento.

134
00:07:19,132 --> 00:07:21,100
‫(escribiendo) Así que configure y

135
00:07:21,100 --> 00:07:24,070
‫esta función se ejecutará cada vez que se

136
00:07:24,070 --> 00:07:27,257
‫establezca un nuevo valor para este campo, de acuerdo.

137
00:07:27,257 --> 00:07:31,180
‫Y aquí, por lo general, especificamos una función de devolución de llamada,

138
00:07:31,180 --> 00:07:33,003
‫que recibe el valor actual.

139
00:07:34,570 --> 00:07:37,610
‫Y en este caso, devuelve básicamente este valor,

140
00:07:37,610 --> 00:07:38,533
‫pero redondeado.

141
00:07:39,760 --> 00:07:44,760
‫Entonces usamos el punto matemático redondo para el valor actual, pero el problema

142
00:07:46,040 --> 00:07:48,610
‫con el punto matemático redondo es

143
00:07:48,610 --> 00:07:51,240
‫que redondea los valores a números enteros.

144
00:07:51,240 --> 00:07:54,253
‫Entonces, por ejemplo, si tuviéramos algo

145
00:07:55,412 --> 00:07:58,830
‫como esto, lo redondearíamos a cinco, está bien.

146
00:07:58,830 --> 00:08:00,410
‫Y eso no es lo que queremos.

147
00:08:00,410 --> 00:08:03,610
‫Queremos que se redondee a 4. 7.

148
00:08:03,610 --> 00:08:05,310
‫Y entonces usaremos

149
00:08:05,310 --> 00:08:10,037
‫un truco aquí, que es bastante común, así que multiplicando esto por 10,

150
00:08:10,037 --> 00:08:13,647
‫y con eso, obtendríamos 46. 666, y

151
00:08:14,580 --> 00:08:17,960
‫luego este redondeado sería 47.

152
00:08:17,960 --> 00:08:21,120
‫Entonces, dividimos los resultados por 10 nuevamente, y eso

153
00:08:21,120 --> 00:08:22,810
‫es 4. 7.

154
00:08:26,470 --> 00:08:29,180
‫Está bien, y eso es todo.

155
00:08:29,180 --> 00:08:31,790
‫Entonces, nuevamente, una función de establecimiento aquí que

156
00:08:31,790 --> 00:08:34,710
‫se ejecutará cada vez que haya un nuevo valor para

157
00:08:34,710 --> 00:08:36,903
‫el campo de promedio de calificaciones.

158
00:08:38,640 --> 00:08:42,650
‫Entonces, solo para probar esto, simplemente actualice esta

159
00:08:42,650 --> 00:08:45,743
‫última revisión que agregamos, que tenía un

160
00:08:49,080 --> 00:08:52,030
‫cinco, y mantengamos el cinco.

161
00:08:52,030 --> 00:08:54,830
‫Entonces, básicamente, todo lo que queremos hacer es volver a

162
00:08:54,830 --> 00:08:57,283
‫ejecutar esa función que crea este promedio.

163
00:08:59,490 --> 00:09:02,910
‫Entonces, si hago esto ahora y ahora obtengo mi recorrido,

164
00:09:02,910 --> 00:09:05,853
‫deberíamos obtener 4. 7 aquí como el promedio.

165
00:09:06,780 --> 00:09:09,620
‫Y sí, aquí vamos.

166
00:09:09,620 --> 00:09:13,210
‫Genial, y eso es todo para este video.

167
00:09:13,210 --> 00:09:15,940
‫Así que creamos esta bonita función de

168
00:09:15,940 --> 00:09:18,940
‫establecimiento y creamos este índice compuesto único aquí para

169
00:09:18,940 --> 00:09:21,000
‫asegurarnos de que un usuario

170
00:09:21,000 --> 00:09:24,053
‫no pueda escribir varias reseñas para el mismo recorrido.

