All language subtitles for 024 Preventing Duplicate Reviews_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:00,980 --> 00:00:02,560 In this video, we're gonna use 2 00:00:02,560 --> 00:00:05,490 a simple trick in order to prevent users 3 00:00:05,490 --> 00:00:08,750 from writing multiple reviews for the same tours, 4 00:00:08,750 --> 00:00:11,323 so basically preventing duplicate reviews. 5 00:00:12,930 --> 00:00:16,140 So in the last video, we created all these reviews 6 00:00:16,140 --> 00:00:18,500 in order to calculate the averages. 7 00:00:18,500 --> 00:00:21,400 And we created multiple reviews for one tour, 8 00:00:21,400 --> 00:00:23,630 but all from the same user. 9 00:00:23,630 --> 00:00:27,590 But in practice, that doesn't make much sense, right? 10 00:00:27,590 --> 00:00:29,700 So in the real world, each user 11 00:00:29,700 --> 00:00:32,509 should only review each tour once. 12 00:00:32,509 --> 00:00:35,670 So basically, a duplicate review happens 13 00:00:35,670 --> 00:00:38,330 when there is a review with the same user 14 00:00:38,330 --> 00:00:40,060 and the same tour ID. 15 00:00:40,060 --> 00:00:43,580 And that's what we want to avoid from happening. 16 00:00:43,580 --> 00:00:45,410 And the obvious solution here is 17 00:00:45,410 --> 00:00:48,470 to just use a unique index, right? 18 00:00:48,470 --> 00:00:50,780 However, it is not enough to set 19 00:00:50,780 --> 00:00:53,120 both these fields to unique. 20 00:00:53,120 --> 00:00:55,770 And actually that would really be very wrong, 21 00:00:55,770 --> 00:01:00,240 because that would mean that each tour can get only review, 22 00:01:00,240 --> 00:01:03,570 and each user can only write one review. 23 00:01:03,570 --> 00:01:06,150 And obviously that's not what we want. 24 00:01:06,150 --> 00:01:09,900 So what we do need is them both together to be unique, 25 00:01:09,900 --> 00:01:14,150 so the combination of user and tour to be always unique. 26 00:01:14,150 --> 00:01:17,460 So that sounds a bit complicated, but luckily for us, 27 00:01:17,460 --> 00:01:21,170 that's actually very easy to achieve with indexes. 28 00:01:21,170 --> 00:01:24,860 So we already created a compound index on the tour before, 29 00:01:24,860 --> 00:01:27,523 and so now let's do the same here on the reviews. 30 00:01:28,660 --> 00:01:32,400 So again, right here after the schema definition, 31 00:01:32,400 --> 00:01:36,513 and of course we're still in the review model, right? 32 00:01:38,210 --> 00:01:41,450 So review, and that's not correct, 33 00:01:41,450 --> 00:01:44,800 so review schema dot index... 34 00:01:47,740 --> 00:01:51,530 Tour set to one, and once more it's not really important 35 00:01:51,530 --> 00:01:53,563 if it's one or minus one in this case. 36 00:01:55,310 --> 00:01:58,180 And user also set to one, okay. 37 00:01:58,180 --> 00:02:00,940 And so again, that's similar to what we did before, 38 00:02:00,940 --> 00:02:03,980 but here we're going to take it to the next level 39 00:02:03,980 --> 00:02:07,140 and now add an object for options. 40 00:02:07,140 --> 00:02:10,109 And the option here that we're gonna set is unique 41 00:02:10,109 --> 00:02:11,350 (typing) 42 00:02:11,350 --> 00:02:12,373 set to true. 43 00:02:15,010 --> 00:02:16,240 And that's actually it. 44 00:02:16,240 --> 00:02:18,700 This will achieve exactly what we want. 45 00:02:18,700 --> 00:02:21,290 So now each combination of tour and user 46 00:02:21,290 --> 00:02:22,903 has always to be unique. 47 00:02:23,780 --> 00:02:26,050 So let's give it a save here, or two, 48 00:02:26,050 --> 00:02:29,640 and then go test this out actually. 49 00:02:29,640 --> 00:02:31,360 Now when I first tested this, 50 00:02:31,360 --> 00:02:33,550 it actually didn't work right away. 51 00:02:33,550 --> 00:02:36,530 Really, it only just started working the next day, 52 00:02:36,530 --> 00:02:39,610 and I'm not really sure why, but if that happens to you, 53 00:02:39,610 --> 00:02:41,910 then don't worry about that, okay. 54 00:02:41,910 --> 00:02:43,840 And maybe it might even happen now 55 00:02:43,840 --> 00:02:45,240 as I'm recording this video. 56 00:02:46,080 --> 00:02:49,970 So anyway, right now, there should not be any reviews 57 00:02:49,970 --> 00:02:51,963 on the tour that we were working on. 58 00:02:52,810 --> 00:02:57,110 So just to make sure we still have zero ratings 59 00:02:57,110 --> 00:03:01,010 and also the reviews are empty. 60 00:03:01,010 --> 00:03:02,840 And so let's now once more create 61 00:03:02,840 --> 00:03:05,223 a new review on this tour. 62 00:03:06,720 --> 00:03:07,553 Okay. 63 00:03:09,800 --> 00:03:13,490 So this is one review, so one user and one review. 64 00:03:13,490 --> 00:03:17,660 So that of course should work, but if I now send this again 65 00:03:17,660 --> 00:03:22,000 and let's say I set it to four and say okay, 66 00:03:22,000 --> 00:03:25,290 then this should not be allowed to work, okay. 67 00:03:25,290 --> 00:03:27,310 Just keep in mind that it might still work 68 00:03:27,310 --> 00:03:30,170 because of the issue I was telling you before, okay. 69 00:03:30,170 --> 00:03:34,253 So sometimes this kind of index doesn't get set immediately. 70 00:03:35,850 --> 00:03:39,120 Oh, but actually, in my case here it worked right away. 71 00:03:39,120 --> 00:03:43,307 So we get this duplicate key error on this index here, 72 00:03:43,307 --> 00:03:47,210 and so that's exactly the index that we just created before. 73 00:03:47,210 --> 00:03:50,063 So let's take a look at that also here in Compass. 74 00:03:52,090 --> 00:03:54,153 So here it actually is not, 75 00:03:55,547 --> 00:03:57,970 and so I will do it just like I did before 76 00:03:57,970 --> 00:03:59,873 and reconnect basically. 77 00:04:04,210 --> 00:04:07,893 So going to the recents, then connecting here. 78 00:04:12,240 --> 00:04:13,360 Natours... 79 00:04:16,760 --> 00:04:17,593 Then... 80 00:04:19,390 --> 00:04:20,452 Of course the tours, 81 00:04:21,519 --> 00:04:24,690 and our indexes here are now these four. 82 00:04:24,690 --> 00:04:26,640 And so that's the one that we just created, 83 00:04:26,640 --> 00:04:29,920 or actually it's not (laughs), okay. 84 00:04:29,920 --> 00:04:32,290 So for some reason, it's not here, 85 00:04:32,290 --> 00:04:34,400 so that's just what I was saying earlier, 86 00:04:34,400 --> 00:04:38,083 but don't mind because actually it is working in our code. 87 00:04:39,840 --> 00:04:43,510 Okay, so we were not able to create two reviews 88 00:04:43,510 --> 00:04:46,220 coming from the same user, okay. 89 00:04:46,220 --> 00:04:48,480 But if you now log in as someone else, 90 00:04:48,480 --> 00:04:52,740 well, then we will certainly be able to post this review. 91 00:04:52,740 --> 00:04:55,530 So let's see what user we could use now. 92 00:04:55,530 --> 00:04:58,973 So let's get all users here, 93 00:05:01,160 --> 00:05:04,970 which I can't because I'm not an admin (laughs), okay. 94 00:05:04,970 --> 00:05:07,070 So I forgot about that part, 95 00:05:07,070 --> 00:05:10,500 and so I'm simply going to retrieve this from Compass. 96 00:05:10,500 --> 00:05:12,003 Sometimes that's just easier. 97 00:05:13,230 --> 00:05:15,410 So this is a guide, a user (exclaims), 98 00:05:15,410 --> 00:05:19,443 so let's just use this Eduardo here or something. 99 00:05:22,120 --> 00:05:26,943 So let's log in as this person, as this user. 100 00:05:31,120 --> 00:05:34,270 Yep, with success, and now we should be allowed 101 00:05:34,270 --> 00:05:39,000 to create a review, and indeed here it is, okay. 102 00:05:39,000 --> 00:05:40,483 And if we now update this, 103 00:05:41,720 --> 00:05:45,970 then we have our two ratings, great. 104 00:05:45,970 --> 00:05:48,620 Now just testing it again, so if we send it again, 105 00:05:48,620 --> 00:05:51,510 it's not going to work because again, 106 00:05:51,510 --> 00:05:53,530 we have a duplicate error. 107 00:05:53,530 --> 00:05:54,640 Awesome. 108 00:05:54,640 --> 00:05:57,110 There is just one more thing that I wanted to show you, 109 00:05:57,110 --> 00:06:00,693 and so for that, I'm going to log in as yet another person, 110 00:06:03,040 --> 00:06:07,300 okay, so that I can then create another review. 111 00:06:07,300 --> 00:06:10,523 So this time, I'm gonna be this Max Smith. 112 00:06:12,150 --> 00:06:14,203 And so let's log in. 113 00:06:17,140 --> 00:06:18,420 (mouse clicks) 114 00:06:18,420 --> 00:06:21,350 Okay, so now I'm officially Max, 115 00:06:21,350 --> 00:06:23,973 and I will be able to post this review. 116 00:06:27,500 --> 00:06:28,453 So with five, 117 00:06:30,840 --> 00:06:32,210 I'm able to do that, 118 00:06:32,210 --> 00:06:35,123 and now I want to take a look at the average. 119 00:06:36,080 --> 00:06:40,660 Okay, so right now it is this 4.6666, 120 00:06:40,660 --> 00:06:43,040 which of course does not look good. 121 00:06:43,040 --> 00:06:45,090 And we could fix this in the front end. 122 00:06:45,090 --> 00:06:47,330 For example when we request this data 123 00:06:47,330 --> 00:06:49,490 from the API and then display it, 124 00:06:49,490 --> 00:06:52,010 we could on the front end then do this rounding. 125 00:06:52,010 --> 00:06:55,260 But actually, I want to do it right here on the back end 126 00:06:55,260 --> 00:06:59,250 so that the end user already gets this final rounded value, 127 00:06:59,250 --> 00:07:02,980 which in this case would be 4.7, right? 128 00:07:02,980 --> 00:07:06,340 And for doing that, I'm gonna show you a small new feature 129 00:07:06,340 --> 00:07:09,230 in Mongoose that we didn't use yet. 130 00:07:09,230 --> 00:07:12,323 So let's go to our tour model, 131 00:07:13,220 --> 00:07:15,070 and to that average, 132 00:07:15,070 --> 00:07:16,410 so right here. 133 00:07:16,410 --> 00:07:19,132 And so now, we can use a setter function. 134 00:07:19,132 --> 00:07:21,100 (typing) 135 00:07:21,100 --> 00:07:24,070 So set and this function will be run each time 136 00:07:24,070 --> 00:07:27,257 that a new value is set for this field, okay. 137 00:07:27,257 --> 00:07:31,180 And so here, we usually specify a callback function, 138 00:07:31,180 --> 00:07:33,003 which receives the current value. 139 00:07:34,570 --> 00:07:37,610 And in this case, it returns basically this value, 140 00:07:37,610 --> 00:07:38,533 but rounded. 141 00:07:39,760 --> 00:07:44,760 So we use math dot round for the current value, 142 00:07:46,040 --> 00:07:48,610 but the problem with math dot round is that 143 00:07:48,610 --> 00:07:51,240 it rounds values to integers. 144 00:07:51,240 --> 00:07:54,253 So for example, if we had something like this, 145 00:07:55,412 --> 00:07:58,830 it would then round this to five, okay. 146 00:07:58,830 --> 00:08:00,410 And that's not what we want. 147 00:08:00,410 --> 00:08:03,610 We want it to be rounded to 4.7. 148 00:08:03,610 --> 00:08:05,310 And so we're gonna use a trick here, 149 00:08:05,310 --> 00:08:10,037 which is quite common, so multiplying this by 10, 150 00:08:10,037 --> 00:08:13,647 and so with that, we would get 46.666, 151 00:08:14,580 --> 00:08:17,960 and then this rounded would be 47. 152 00:08:17,960 --> 00:08:21,120 And so then, we divide the results by 10 again, 153 00:08:21,120 --> 00:08:22,810 and that then is 4.7. 154 00:08:26,470 --> 00:08:29,180 All right, and that's actually it. 155 00:08:29,180 --> 00:08:31,790 So again, a setter function here which is going 156 00:08:31,790 --> 00:08:34,710 to be run each time that there is a new value 157 00:08:34,710 --> 00:08:36,903 for the ratings average field. 158 00:08:38,640 --> 00:08:42,650 So just to test this, let's actually simply 159 00:08:42,650 --> 00:08:45,743 update this last review that we added, 160 00:08:49,080 --> 00:08:52,030 which had a five, and let's keep it at five. 161 00:08:52,030 --> 00:08:54,830 So all we basically want to do is to re-run 162 00:08:54,830 --> 00:08:57,283 that function which creates this average. 163 00:08:59,490 --> 00:09:02,910 So if I do this now and now get my tour, 164 00:09:02,910 --> 00:09:05,853 we should get 4.7 here as the average. 165 00:09:06,780 --> 00:09:09,620 And yep, here we go. 166 00:09:09,620 --> 00:09:13,210 Great, and that's actually it already for this video. 167 00:09:13,210 --> 00:09:15,940 So we created this nice setter function, 168 00:09:15,940 --> 00:09:18,940 and we created this unique compound index here 169 00:09:18,940 --> 00:09:21,000 in order to ensure that one user 170 00:09:21,000 --> 00:09:24,053 cannot write multiple reviews for the same tour. 13296

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.