All language subtitles for 017 Creating New Bookings on Checkout Success_Downloadly.ir_en

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
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
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,070 --> 00:00:01,970 All right. 2 00:00:01,970 --> 00:00:05,850 So let's now create a new booking document in our database 3 00:00:05,850 --> 00:00:09,083 whenever a user successfully purchases a tour. 4 00:00:10,940 --> 00:00:13,400 So we're back here in the booking controller 5 00:00:13,400 --> 00:00:15,130 and in the raw tender, 6 00:00:15,130 --> 00:00:18,410 which creates the checkout sessions, right? 7 00:00:18,410 --> 00:00:21,990 And remember that here we have this success url 8 00:00:21,990 --> 00:00:25,210 and this url is the basis of the functionality 9 00:00:25,210 --> 00:00:27,670 that we're going to implement in this lecture. 10 00:00:27,670 --> 00:00:30,400 So whenever a check out is successful, 11 00:00:30,400 --> 00:00:34,440 the browser will automatically go to this url, 12 00:00:34,440 --> 00:00:39,140 which right now is basically simply our homepage, right? 13 00:00:39,140 --> 00:00:41,190 It's also at this point in time, 14 00:00:41,190 --> 00:00:44,360 so when a checkout is successful that we want to create 15 00:00:44,360 --> 00:00:46,130 a new booking, right? 16 00:00:46,130 --> 00:00:49,200 So basically we want to create a new booking 17 00:00:49,200 --> 00:00:53,010 whenever this url here is accessed. 18 00:00:53,010 --> 00:00:56,680 Now we could now create a new route for this success, 19 00:00:56,680 --> 00:00:59,940 but then we would have to create a whole new page 20 00:00:59,940 --> 00:01:02,690 and that's not really worth it in this case. 21 00:01:02,690 --> 00:01:06,090 And that's because what we're going to do in this lecture 22 00:01:06,090 --> 00:01:08,860 is only a temporary solution anyway 23 00:01:08,860 --> 00:01:12,040 because it's not really secure, okay? 24 00:01:12,040 --> 00:01:14,690 So remember how we said some lectures ago 25 00:01:14,690 --> 00:01:17,980 and that nice diagram that later when a website 26 00:01:17,980 --> 00:01:21,500 is actually deployed on a server we will get access 27 00:01:21,500 --> 00:01:24,830 to the session object once the purchase is completed 28 00:01:24,830 --> 00:01:27,200 using Stripe Webhooks. 29 00:01:27,200 --> 00:01:29,750 And so these webhooks will then be perfect 30 00:01:29,750 --> 00:01:31,970 for us to create a new booking. 31 00:01:31,970 --> 00:01:32,803 Okay? 32 00:01:32,803 --> 00:01:35,040 But for now, since we can't do that yet, 33 00:01:35,040 --> 00:01:36,650 let's use a work around, 34 00:01:36,650 --> 00:01:39,810 which is simply to put the data that we need to create 35 00:01:39,810 --> 00:01:43,810 a new booking right into this url as a query string. 36 00:01:43,810 --> 00:01:44,670 Okay? 37 00:01:44,670 --> 00:01:47,800 And we need to create a query string because Stripe 38 00:01:47,800 --> 00:01:51,620 will just make a get request to this url here, 39 00:01:51,620 --> 00:01:55,280 and so we cannot really send a body or any data with it 40 00:01:55,280 --> 00:01:57,680 except for the query string. 41 00:01:57,680 --> 00:01:58,513 All right? 42 00:01:58,513 --> 00:02:02,300 So let's do that and what we need here is basically 43 00:02:02,300 --> 00:02:05,660 the three required fields in our booking model. 44 00:02:05,660 --> 00:02:07,200 So tour, user, 45 00:02:07,200 --> 00:02:08,930 and price. 46 00:02:08,930 --> 00:02:10,199 So 47 00:02:10,199 --> 00:02:11,400 tour 48 00:02:11,400 --> 00:02:12,890 is equal to 49 00:02:14,555 --> 00:02:16,478 req.params 50 00:02:16,478 --> 00:02:17,311 .tourid 51 00:02:18,410 --> 00:02:19,243 right? 52 00:02:20,350 --> 00:02:21,793 So what did I do here? 53 00:02:23,500 --> 00:02:25,290 So that's correct. 54 00:02:25,290 --> 00:02:27,473 Next up we need the user. 55 00:02:28,760 --> 00:02:29,793 So user, 56 00:02:30,700 --> 00:02:32,887 which is at request 57 00:02:32,887 --> 00:02:33,807 .user 58 00:02:33,807 --> 00:02:35,290 .id. 59 00:02:35,290 --> 00:02:38,170 And finally we need the price, 60 00:02:38,170 --> 00:02:39,003 which is 61 00:02:40,230 --> 00:02:41,063 at tour 62 00:02:42,277 --> 00:02:43,110 .price. 63 00:02:44,190 --> 00:02:45,630 All right. 64 00:02:45,630 --> 00:02:47,250 Now as I said before, 65 00:02:47,250 --> 00:02:50,140 this is of course not secure at all 66 00:02:50,140 --> 00:02:54,760 because right now anyone who knows this url structure here 67 00:02:54,760 --> 00:02:57,510 could simply call it without going through the checkout 68 00:02:57,510 --> 00:02:59,250 process, right? 69 00:02:59,250 --> 00:03:01,930 And so anyone really could just book a tour 70 00:03:01,930 --> 00:03:03,630 without having to pay. 71 00:03:03,630 --> 00:03:06,530 All they'd have to do is to open this url 72 00:03:06,530 --> 00:03:08,830 with the tour, user, and price 73 00:03:08,830 --> 00:03:11,900 and then they would automatically create a new booking 74 00:03:11,900 --> 00:03:14,320 without even paying, okay? 75 00:03:14,320 --> 00:03:16,080 So again, not really secure, 76 00:03:16,080 --> 00:03:19,160 but for now as a work around it works just fine 77 00:03:19,160 --> 00:03:22,240 because not many people will of course will know 78 00:03:22,240 --> 00:03:24,920 that this our success url. 79 00:03:24,920 --> 00:03:25,753 Okay? 80 00:03:25,753 --> 00:03:28,790 Because actually we're going to hide that fact a little bit 81 00:03:28,790 --> 00:03:30,910 in a second, okay? 82 00:03:30,910 --> 00:03:35,120 So let's now create the function that will actually create 83 00:03:35,120 --> 00:03:37,083 the new booking in the database. 84 00:03:38,320 --> 00:03:40,610 So that's going to exports 85 00:03:40,610 --> 00:03:42,150 dot 86 00:03:42,150 --> 00:03:42,983 create 87 00:03:44,000 --> 00:03:44,833 booking 88 00:03:46,100 --> 00:03:47,150 checkout 89 00:03:47,150 --> 00:03:49,600 and it's called create booking checkout 90 00:03:49,600 --> 00:03:52,980 because later on we will also have create booking, 91 00:03:52,980 --> 00:03:56,313 which will then be accessible from our bookings API. 92 00:03:57,760 --> 00:03:59,360 All right. 93 00:03:59,360 --> 00:04:00,193 Anyway. 94 00:04:02,160 --> 00:04:03,523 Here as always. 95 00:04:06,460 --> 00:04:09,990 And let's start by getting our data from the query string. 96 00:04:09,990 --> 00:04:13,370 And so for that I'm going to use the structuring. 97 00:04:13,370 --> 00:04:14,763 So tour, 98 00:04:15,920 --> 00:04:17,519 user, 99 00:04:17,519 --> 00:04:21,113 and price are available at request 100 00:04:21,113 --> 00:04:22,520 .query. 101 00:04:22,520 --> 00:04:25,540 So remember that is the query string. 102 00:04:25,540 --> 00:04:28,830 Then we actually only want to create a new booking 103 00:04:28,830 --> 00:04:31,720 if all of these here are specified. 104 00:04:31,720 --> 00:04:35,060 And so basically we say that if they don't exist 105 00:04:35,060 --> 00:04:37,980 then we turn and go to the next middleware. 106 00:04:37,980 --> 00:04:41,003 So that's our very standard procedure, right? 107 00:04:42,190 --> 00:04:45,890 So we say that if there is no tour and 108 00:04:45,890 --> 00:04:47,480 no user 109 00:04:47,480 --> 00:04:48,680 and 110 00:04:48,680 --> 00:04:50,050 no price. 111 00:04:50,050 --> 00:04:53,450 So basically we require that all on them exist. 112 00:04:53,450 --> 00:04:55,253 And so in that case, 113 00:04:56,580 --> 00:04:58,790 we go to the next middleware. 114 00:04:58,790 --> 00:05:02,420 Now what exactly is the next middleware actually? 115 00:05:02,420 --> 00:05:06,300 Well remember that we want to create a new booking 116 00:05:06,300 --> 00:05:08,340 on this home url. 117 00:05:08,340 --> 00:05:09,660 So this one here. 118 00:05:09,660 --> 00:05:12,380 Because again that is the url that is called 119 00:05:12,380 --> 00:05:15,610 whenever a purchase is successful with Stripe. 120 00:05:15,610 --> 00:05:18,810 And so what we need to do is add this middleware function 121 00:05:18,810 --> 00:05:21,990 that we're creating right now onto the middleware stack 122 00:05:21,990 --> 00:05:23,393 of this route handler. 123 00:05:24,230 --> 00:05:26,620 So what route handler is that? 124 00:05:26,620 --> 00:05:30,943 Well it's in view routes and it is this one, 125 00:05:32,170 --> 00:05:33,270 right? 126 00:05:33,270 --> 00:05:36,040 So that probably sounds a bit confusing. 127 00:05:36,040 --> 00:05:39,610 But again this is the route that will be hit 128 00:05:39,610 --> 00:05:42,080 when a credit card is successfully charged. 129 00:05:42,080 --> 00:05:44,730 And so this is also the point of time where we want 130 00:05:44,730 --> 00:05:46,260 to create a new booking. 131 00:05:46,260 --> 00:05:49,940 And so here is where we need to add that middleware function 132 00:05:51,340 --> 00:05:53,350 so let's actually do that 133 00:05:53,350 --> 00:05:56,060 and require our controller 134 00:05:56,060 --> 00:05:57,963 and now we'll just duplicate this here. 135 00:06:02,440 --> 00:06:06,850 So booking controller and now I will actually edit here 136 00:06:06,850 --> 00:06:09,540 right at the beginning cause it doesn't really matter 137 00:06:09,540 --> 00:06:11,743 if we're logged in or not for this. 138 00:06:13,130 --> 00:06:16,780 So bookingcontroller.get, 139 00:06:16,780 --> 00:06:18,300 or actually dot 140 00:06:18,300 --> 00:06:19,770 create 141 00:06:19,770 --> 00:06:20,603 bookingcheckout. 142 00:06:22,878 --> 00:06:25,060 Give it a save and 143 00:06:25,060 --> 00:06:26,230 okay. 144 00:06:26,230 --> 00:06:29,150 And again this is here just kind of temporary 145 00:06:29,150 --> 00:06:32,610 until we actually have our websites deployed to a server 146 00:06:32,610 --> 00:06:35,560 where we will then be able to create a better solution 147 00:06:35,560 --> 00:06:36,950 for this. 148 00:06:36,950 --> 00:06:37,783 Okay? 149 00:06:39,180 --> 00:06:41,230 So here in the booking controller 150 00:06:41,230 --> 00:06:44,930 it is now time to actually create that new booking. 151 00:06:44,930 --> 00:06:48,903 And so actually we now need to import that model. 152 00:06:50,810 --> 00:06:52,053 So let's do that here. 153 00:06:53,520 --> 00:06:54,780 Booking 154 00:06:54,780 --> 00:06:55,613 and 155 00:06:57,750 --> 00:06:59,363 booking model here as well. 156 00:07:01,280 --> 00:07:04,830 And for some reason here I have these weird path. 157 00:07:04,830 --> 00:07:08,170 So these don't make any sense at all. 158 00:07:08,170 --> 00:07:11,910 I'm not sure why I wrote them like this back then. 159 00:07:11,910 --> 00:07:15,160 So what we have there is exactly the same as this. 160 00:07:15,160 --> 00:07:17,513 But of course this is more readable. 161 00:07:18,570 --> 00:07:19,670 Anyway. 162 00:07:19,670 --> 00:07:21,810 Let's now create that booking. 163 00:07:21,810 --> 00:07:23,850 And so for that we will have to await 164 00:07:26,520 --> 00:07:27,353 booking 165 00:07:28,497 --> 00:07:29,330 .create 166 00:07:30,900 --> 00:07:32,040 with an object 167 00:07:32,040 --> 00:07:33,390 of 168 00:07:33,390 --> 00:07:34,223 tour, 169 00:07:35,120 --> 00:07:35,953 user, 170 00:07:36,810 --> 00:07:37,843 and price. 171 00:07:38,830 --> 00:07:40,310 And that's it. 172 00:07:40,310 --> 00:07:42,660 Now we also need to mark this one here as async 173 00:07:44,220 --> 00:07:45,660 and as always 174 00:07:46,582 --> 00:07:47,499 catchasync. 175 00:07:53,252 --> 00:07:54,085 Okay? 176 00:07:54,085 --> 00:07:56,450 And we're not saving this into any variable 177 00:07:56,450 --> 00:07:58,250 well because we don't really need it. 178 00:07:58,250 --> 00:08:01,470 We're not going to send this back as an API response. 179 00:08:01,470 --> 00:08:04,970 At this point all we want to do here is create 180 00:08:04,970 --> 00:08:07,363 that new document, okay? 181 00:08:08,480 --> 00:08:10,680 Next up we could then say 182 00:08:12,280 --> 00:08:14,460 next, like this. 183 00:08:14,460 --> 00:08:17,220 And so that would then go the next middleware 184 00:08:17,220 --> 00:08:18,990 but that's not really ideal. 185 00:08:18,990 --> 00:08:22,010 So again keep in mind that the next middleware 186 00:08:22,010 --> 00:08:24,450 in the stack is of course this one 187 00:08:24,450 --> 00:08:26,640 and the get overview. 188 00:08:26,640 --> 00:08:29,041 So basically the function that it's going to render 189 00:08:29,041 --> 00:08:30,800 our page. 190 00:08:30,800 --> 00:08:35,023 But remember that this url is all of this. 191 00:08:35,980 --> 00:08:38,919 So all this with all this data here. 192 00:08:38,919 --> 00:08:41,610 And so again that's not secure at all. 193 00:08:41,610 --> 00:08:45,200 And so at least let's make it a little bit more secure, 194 00:08:45,200 --> 00:08:46,200 all right? 195 00:08:46,200 --> 00:08:48,660 And so what we can do here is to basically 196 00:08:48,660 --> 00:08:52,090 redirect the application now to only this 197 00:08:52,090 --> 00:08:52,923 url. 198 00:08:53,837 --> 00:08:55,980 And so basically you're removing the query string 199 00:08:55,980 --> 00:08:57,277 from the original url. 200 00:08:59,007 --> 00:09:01,710 And so actually we're now going to use something 201 00:09:01,710 --> 00:09:03,300 we never used before. 202 00:09:03,300 --> 00:09:04,763 So that's great, right? 203 00:09:05,860 --> 00:09:08,193 So we're going to use redirect. 204 00:09:10,810 --> 00:09:11,970 All right? 205 00:09:11,970 --> 00:09:15,230 So now what we want is the entire url, 206 00:09:15,230 --> 00:09:16,803 but without the query string. 207 00:09:18,000 --> 00:09:20,620 So what we could do is to just 208 00:09:20,620 --> 00:09:23,450 kind of cheat and copy 209 00:09:23,450 --> 00:09:24,660 this here. 210 00:09:24,660 --> 00:09:27,110 But let's make it a bit more elegant. 211 00:09:27,110 --> 00:09:31,096 So what we're doing is request 212 00:09:31,096 --> 00:09:33,090 .theoriginalurl, 213 00:09:33,090 --> 00:09:34,573 which we already used before. 214 00:09:35,870 --> 00:09:38,090 And so that's the entire url basically 215 00:09:38,090 --> 00:09:40,190 from which the request came. 216 00:09:40,190 --> 00:09:43,090 And so now what we need to do is to split it 217 00:09:43,090 --> 00:09:44,283 by the question mark. 218 00:09:48,010 --> 00:09:48,843 Right? 219 00:09:48,843 --> 00:09:52,500 Because that's the divider between the 220 00:09:52,500 --> 00:09:55,053 part that we actually want and the query string. 221 00:09:56,700 --> 00:10:00,040 So if we split this by the question mark, 222 00:10:00,040 --> 00:10:02,917 then we will have an array where the first element is this 223 00:10:02,917 --> 00:10:06,420 and the second element is all of the rest. 224 00:10:06,420 --> 00:10:08,430 So the query string itself. 225 00:10:08,430 --> 00:10:11,210 And so here we take the first element 226 00:10:11,210 --> 00:10:13,480 and so that is then our homepage. 227 00:10:13,480 --> 00:10:14,463 So our route url. 228 00:10:15,560 --> 00:10:19,520 And what redirect here does is basically to create 229 00:10:19,520 --> 00:10:24,060 a new request but to this new url that we passed in there. 230 00:10:24,060 --> 00:10:25,170 All right? 231 00:10:25,170 --> 00:10:27,680 So this will now create yet another request 232 00:10:27,680 --> 00:10:28,653 to our route url. 233 00:10:29,890 --> 00:10:32,900 So we're again gonna hit this route. 234 00:10:32,900 --> 00:10:37,230 And so once more we will hit this middleware here. 235 00:10:37,230 --> 00:10:39,790 So the one that we're just creating. 236 00:10:39,790 --> 00:10:42,850 So for the second time we're going to be hitting that 237 00:10:42,850 --> 00:10:47,240 but now the tour, user, and price are no longer defined. 238 00:10:47,240 --> 00:10:49,860 And so then we will go to the next middleware, 239 00:10:49,860 --> 00:10:53,540 which finally is the get overview handler function, 240 00:10:53,540 --> 00:10:57,870 which then we'll just render the homepage, okay? 241 00:10:57,870 --> 00:10:59,080 Made sense? 242 00:10:59,080 --> 00:11:01,700 So this is kind of circular then. 243 00:11:01,700 --> 00:11:03,870 So basically in the beginning we're gonna hit 244 00:11:03,870 --> 00:11:05,100 this route here. 245 00:11:05,100 --> 00:11:07,430 Then a new booking here is created 246 00:11:07,430 --> 00:11:10,860 and we redirect the application again to this route, 247 00:11:10,860 --> 00:11:12,710 this time without the query string. 248 00:11:12,710 --> 00:11:14,540 And so without the query string 249 00:11:14,540 --> 00:11:16,370 and this middleware, 250 00:11:16,370 --> 00:11:18,120 we passed right to the next one. 251 00:11:18,120 --> 00:11:21,350 And so only then we get to is logged in 252 00:11:21,350 --> 00:11:22,723 and get overview. 253 00:11:24,020 --> 00:11:25,450 All right? 254 00:11:25,450 --> 00:11:29,390 And so that's actually it, all right? 255 00:11:29,390 --> 00:11:32,910 Well that's just right here that this is only temporary 256 00:11:38,730 --> 00:11:39,563 because it's 257 00:11:41,520 --> 00:11:42,523 unsecure. 258 00:11:43,700 --> 00:11:47,410 Everyone can make bookings 259 00:11:49,010 --> 00:11:49,963 without paying. 260 00:11:50,930 --> 00:11:54,133 So again that would be terrible for the business. 261 00:11:55,250 --> 00:11:57,733 Okay, now it's time to test this out. 262 00:11:59,210 --> 00:12:02,990 And so actually I want to do it with that other user 263 00:12:02,990 --> 00:12:06,620 that we created which is jonas@mailsac. 264 00:12:06,620 --> 00:12:09,510 And that's because I want to see if we actually get 265 00:12:09,510 --> 00:12:11,913 that email receipt from Stripe. 266 00:12:13,510 --> 00:12:17,280 So let's log in with that user 267 00:12:17,280 --> 00:12:18,466 onto our website. 268 00:12:18,466 --> 00:12:20,170 So 269 00:12:20,170 --> 00:12:21,063 log out. 270 00:12:23,080 --> 00:12:24,323 Well that's not working. 271 00:12:27,050 --> 00:12:28,090 That's weird. 272 00:12:28,090 --> 00:12:29,023 Let's reload. 273 00:12:30,430 --> 00:12:33,520 And that should be working so let's see 274 00:12:33,520 --> 00:12:36,230 if we have some error in our javascript. 275 00:12:36,230 --> 00:12:38,160 Because that is actually client facing 276 00:12:39,210 --> 00:12:41,763 and we get Stripe is not defined. 277 00:12:42,730 --> 00:12:46,180 Let's see if we have the same error here on this page, 278 00:12:46,180 --> 00:12:48,170 which we shouldn't, right? 279 00:12:48,170 --> 00:12:51,010 And actually it's not there, 280 00:12:51,010 --> 00:12:52,393 but back on all tours. 281 00:12:53,360 --> 00:12:54,660 Yeah, it's there. 282 00:12:54,660 --> 00:12:58,480 So the solution to that is to move it from the tour 283 00:12:59,400 --> 00:13:01,193 basically to all of the pages. 284 00:13:02,910 --> 00:13:04,010 All right? 285 00:13:04,010 --> 00:13:07,970 So for some reason the parcel bundler does it so 286 00:13:07,970 --> 00:13:08,920 that it needs to be 287 00:13:10,260 --> 00:13:12,703 here in the main scope for all of them. 288 00:13:14,850 --> 00:13:16,933 So for all the pages, okay? 289 00:13:19,090 --> 00:13:21,970 So actually let's put that at the bottom 290 00:13:26,010 --> 00:13:27,673 right here before our bundle. 291 00:13:29,530 --> 00:13:30,690 All right? 292 00:13:30,690 --> 00:13:34,143 Try that again and so now we're good to go. 293 00:13:35,170 --> 00:13:37,510 So log out and 294 00:13:37,510 --> 00:13:38,343 that worked. 295 00:13:39,200 --> 00:13:40,083 Now log in. 296 00:13:42,183 --> 00:13:44,613 Of course now our copy is gone. 297 00:13:53,790 --> 00:13:54,963 One two three four. 298 00:13:56,400 --> 00:13:58,180 No, that's not correct. 299 00:13:58,180 --> 00:14:00,043 Test one two three four. 300 00:14:01,580 --> 00:14:04,470 So I guess I changed the password at some point, 301 00:14:04,470 --> 00:14:07,363 so let's try a new password, 302 00:14:08,920 --> 00:14:10,460 which is not working either. 303 00:14:10,460 --> 00:14:13,180 Let's try pass one two three four 304 00:14:14,170 --> 00:14:15,223 and that worked. 305 00:14:16,100 --> 00:14:18,260 So it's not test one two three four, 306 00:14:18,260 --> 00:14:20,603 but pass one two three four. 307 00:14:21,460 --> 00:14:22,763 At least here in my case. 308 00:14:23,810 --> 00:14:25,940 So let's try to book the 309 00:14:26,960 --> 00:14:28,493 let's say the sports lover. 310 00:14:30,520 --> 00:14:31,353 All right. 311 00:14:33,150 --> 00:14:34,340 Down here. 312 00:14:34,340 --> 00:14:35,310 Book tour 313 00:14:37,010 --> 00:14:38,310 and that still works 314 00:14:39,260 --> 00:14:41,091 and that's the expensive one. 315 00:14:41,091 --> 00:14:42,100 (laughs) 316 00:14:42,100 --> 00:14:45,020 So four two four two and then four two 317 00:14:45,020 --> 00:14:46,203 all the way to the end. 318 00:14:47,060 --> 00:14:52,020 Then here's some month and here is some number. 319 00:14:52,020 --> 00:14:55,590 Let's say my entire name here 320 00:14:55,590 --> 00:14:57,523 and now let's hit pay. 321 00:14:59,970 --> 00:15:02,090 And I'll take a look at the url bar. 322 00:15:02,090 --> 00:15:06,440 And indeed we get our homepage so our route url 323 00:15:06,440 --> 00:15:10,280 without any of the query string that we specified before. 324 00:15:10,280 --> 00:15:13,550 So that means that something is working. 325 00:15:13,550 --> 00:15:18,400 So let's take a look at compass and click up here to reload 326 00:15:20,520 --> 00:15:23,180 and we get our bookings collection. 327 00:15:23,180 --> 00:15:24,540 And that's a good sign. 328 00:15:24,540 --> 00:15:26,742 And indeed here we go. 329 00:15:26,742 --> 00:15:30,360 Our very first document is created. 330 00:15:30,360 --> 00:15:32,673 So remember that was that price. 331 00:15:33,740 --> 00:15:36,350 Let's also take a look at the user's id 332 00:15:38,100 --> 00:15:41,653 which is this one ending in eight E three B. 333 00:15:43,280 --> 00:15:46,640 So eight E three B, that's correct. 334 00:15:46,640 --> 00:15:50,100 And I'm assuming that the tour is also going to be correct. 335 00:15:50,100 --> 00:15:51,220 So perfect. 336 00:15:51,220 --> 00:15:52,540 That worked as well 337 00:15:52,540 --> 00:15:56,200 and so now we really have a way of creating bookings 338 00:15:56,200 --> 00:15:58,773 whenever a booking happens with Stripe. 339 00:15:59,772 --> 00:16:04,040 Let's also quickly checkout our dashboards here again. 340 00:16:04,040 --> 00:16:05,770 That's really fun. 341 00:16:05,770 --> 00:16:07,720 And I guess I just have to reload here. 342 00:16:13,662 --> 00:16:14,745 So let's see. 343 00:16:15,770 --> 00:16:20,260 Here is jonas at whatever we named that is. 344 00:16:20,260 --> 00:16:21,580 We've got the sports lover 345 00:16:22,460 --> 00:16:23,860 and 346 00:16:23,860 --> 00:16:25,100 perfect. 347 00:16:25,100 --> 00:16:26,657 That's working now. 348 00:16:26,657 --> 00:16:27,900 And the final task. 349 00:16:27,900 --> 00:16:30,410 Let's now check out mailsac. 350 00:16:31,390 --> 00:16:32,223 Mail 351 00:16:32,223 --> 00:16:33,070 sac 352 00:16:34,316 --> 00:16:35,149 .com 353 00:16:36,490 --> 00:16:39,060 and see if I got my 354 00:16:39,060 --> 00:16:39,923 email there. 355 00:16:42,190 --> 00:16:45,050 And well actually I did not, 356 00:16:45,050 --> 00:16:46,840 but that's not a big deal. 357 00:16:46,840 --> 00:16:51,200 I'm not sure maybe it just doesn't work with test data. 358 00:16:51,200 --> 00:16:53,160 And so for now that's all I have to show you 359 00:16:53,160 --> 00:16:55,670 about Stripe integration. 360 00:16:55,670 --> 00:16:58,230 Now again once a website is deployed, 361 00:16:58,230 --> 00:17:00,690 we will then actually use Stripe Webhooks 362 00:17:00,690 --> 00:17:03,320 in order to create bookings in a more secure 363 00:17:03,320 --> 00:17:05,050 and much better way. 364 00:17:05,050 --> 00:17:06,319 All right? 365 00:17:06,319 --> 00:17:11,319 So let's just again take a minute to recap what we did here. 366 00:17:12,000 --> 00:17:14,010 So basically we added 367 00:17:14,970 --> 00:17:18,069 all the variables that we need to create a new booking 368 00:17:18,069 --> 00:17:19,327 to the success url. 369 00:17:20,609 --> 00:17:24,319 Then we added a new middleware function here to the stack 370 00:17:24,319 --> 00:17:26,270 of that exact route. 371 00:17:26,270 --> 00:17:27,790 So this one here. 372 00:17:27,790 --> 00:17:31,200 And so like this whenever this url here is hit 373 00:17:31,200 --> 00:17:34,387 we will attempt to create a new booking. 374 00:17:34,387 --> 00:17:35,220 All right? 375 00:17:35,220 --> 00:17:38,380 But that new booking is of course only created 376 00:17:38,380 --> 00:17:43,290 when the tour, user, and price are specified in the query. 377 00:17:43,290 --> 00:17:45,180 And so in this middleware function, 378 00:17:45,180 --> 00:17:48,610 if they are specified on the query well then we create 379 00:17:48,610 --> 00:17:50,900 a new booking in here. 380 00:17:50,900 --> 00:17:53,870 Then after that is done we remove the query string 381 00:17:53,870 --> 00:17:56,680 from the url in order to make the whole process 382 00:17:56,680 --> 00:17:59,240 a bit less transparent for the user. 383 00:17:59,240 --> 00:18:02,880 Basically so that whole query string doesn't show up 384 00:18:02,880 --> 00:18:05,400 in our browser's url bar. 385 00:18:05,400 --> 00:18:08,690 And then down here we redirect our application 386 00:18:08,690 --> 00:18:11,940 to this new route url here, okay? 387 00:18:11,940 --> 00:18:15,650 And so this way this middleware here will be skipped 388 00:18:15,650 --> 00:18:19,233 and then our normal homepage will simply get rendered. 389 00:18:20,530 --> 00:18:21,363 All right? 390 00:18:22,320 --> 00:18:25,630 Let's just get rid of this app error here 391 00:18:26,510 --> 00:18:30,340 and the factory we will actually need in the next lecture. 392 00:18:30,340 --> 00:18:33,660 So in that next lecture we will actually take care 393 00:18:33,660 --> 00:18:36,950 of implementing one last piece of our website, 394 00:18:36,950 --> 00:18:41,110 which basically is this page here for my bookings. 395 00:18:41,110 --> 00:18:44,140 And what this page will do is to basically display 396 00:18:44,140 --> 00:18:48,040 one tour card for each of the tours that we have booked. 397 00:18:48,040 --> 00:18:51,410 So looking pretty similar to this homepage, 398 00:18:51,410 --> 00:18:54,630 but only with the tours that the currently logged in user 399 00:18:54,630 --> 00:18:56,940 has booked, all right? 400 00:18:56,940 --> 00:19:00,150 So that's a nice feature for a website, right? 401 00:19:00,150 --> 00:19:02,663 And so let's take care of that in the next one. 28496

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