Microservices with NodeJS, React, Typescript and Kubernetes

95h 13m 4s
English
Paid
August 20, 2024

In building large scale applications intended for growth, microservices architecture is the go-to solution. One issue for Javascript and NodeJS learners is the few courses and/or resources to teach event-driven microservices with NodeJS and Typescript. This course was designed to show you how to setup and build a large scale event-driven microservices application using React and Typescript on the client side and NodeJS and Typescript on the server side.

This course is a fullstack course that focuses on developing microservices and connecting them to a client web application and it follows a hands-on approach or 'learn-by-doing, which means the whole course is structured around building a fullstack web application and the different concepts will be explained detailedly as they are introduced.

More

What Technologies You'll Use

Because we are building a fullstack application, we will use a variety of tools and technologies. For the frontend, we'll use React, Tailwindcss and Typescript to show content to users. Each microservice will be built using NodeJS, Express and Typescript. Across the microservices, you'll use tools and technologies like Elasticsearch, Kibana, Rabbitmq, Redis, SocketIO, MySQL, PostgreSQL and MongoDB. Each microservice will be built as a Docker image and executed in a Kubernetes cluster. The Kubernetes cluster will be created locally with Minikube and on the cloud with AWS EKS. There are numerous tools, technologies and packages that will be used both locally and in our kubernetes clusters.

Not familiar with some of these? No problem! This course will guide you on how to setup and use these technologies in your apps.

Watch Online Microservices with NodeJS, React, Typescript and Kubernetes

Join premium to watch
Go to premium
# Title Duration
1 Walkthrough of complete application 25:48
2 AWS kubernetes objects overview 07:28
3 Overview of microservices code 04:03
4 Elasticsearch and Kibana dashboard 08:09
5 Prometheus and Grafana overview 04:37
6 Monolithic Architecture 09:26
7 Microservices Architecture 12:03
8 Microservices communication types 06:49
9 Microservices communication styles 05:33
10 Project description 07:35
11 Functional requirements 07:04
12 Non-functional requirements 07:09
13 Design decisions 09:33
14 Project architecture 08:52
15 Inter-process communication 06:17
16 Local dev tools 03:17
17 Docker installation 02:47
18 Redis service 10:11
19 MongoDB service 06:19
20 MySQL and Postgres services 07:58
21 Rabbitmq service 06:08
22 Elasticsearch service 13:38
23 Kibana service 10:08
24 Start docker compose services 06:18
25 Kibana dashboard 04:20
26 Section introduction 00:40
27 Helper library description 09:19
28 Helper library folder 10:21
29 Github project 05:20
30 Node npmrc file 08:35
31 Helper interfaces 09:30
32 Cloudinary upload method 12:07
33 Error handlers 11:46
34 Gateway middleware 13:43
35 Logger 14:11
36 Helpers file 02:43
37 Github actions 11:37
38 Publish helper library 06:06
39 Update Library 04:59
40 Section introduction 01:01
41 Notification emails introduction 05:20
42 Notification service setup 06:52
43 Package json build script 09:03
44 Add src folder and files 09:15
45 Notification service config file 09:18
46 Server functions 10:01
47 Notification service health route 06:26
48 Elasticsearch connection 12:27
49 Start notification service 10:23
50 Rabbitmq connection 10:45
51 Rabbitmq introduction 09:23
52 Rabbitmq channel methods 07:39
53 Auth email consumer method 16:43
54 Use auth email consumer method 09:54
55 Order email consumer method 07:19
56 Mail transport method 05:35
57 Email templates - Part 1 12:38
58 Email templates - Part 2 04:57
59 Use send email method 11:55
60 Add send email to order consumer 06:49
61 Setup jest 12:31
62 Auth consumer test - Part 1 13:43
63 Auth consumer test - Part 2 07:12
64 Development dockerfile 07:51
65 Add notification service to docker compose 07:32
66 Production dockerfile 10:51
67 Package json scripts commands 05:51
68 Copy emails folder into build 08:09
69 Push code to github 04:23
70 API gateway architecture 04:00
71 Gateway service folder 06:52
72 Gateway server file - Part 1 10:13
73 Gateway server file - Part 2 09:25
74 Gateway server file - Part 3 07:51
75 Gateway config file 09:11
76 Setup gateway service elasticsearch connection 07:50
77 Gateway health route 09:56
78 Authentication middleware 09:33
79 Axios Service 12:41
80 Add gateway service to docker compose 03:40
81 Push code to github 04:04
82 Auth service introduction 03:36
83 Auth service project setup 08:21
84 Setup database connection 11:29
85 Fix sequelize database setup 01:33
86 Check elasticsearch connection method 04:07
87 Security middleware function 10:21
88 Server methods 09:07
89 App entry file 04:35
90 Signup schema 09:57
91 Login schema 06:55
92 Sequelize model basics 09:39
93 Database table model fields 12:52
94 Database indexes 12:42
95 Connect MySQL to tableplus 07:14
96 Rabbitmq connection 11:00
97 Create user service method 09:57
98 Auth service get methods 09:45
99 Auth service update methods 06:40
100 Auth service endpoints 06:07
101 Signup controller method - Part 1 14:08
102 Signup controller method - Part 2 11:21
103 Auth service signup routes 12:49
104 Auth service gateway methods 11:21
105 Gateway signup route 08:34
106 Get cloudinary keys 11:27
107 Update shared library gateway method 08:56
108 Add gateway token to shared library 08:52
109 Auth signin controller 11:29
110 Verify email controller 09:15
111 Forgot password method 10:30
112 Reset password method 08:48
113 Change password method 08:18
114 Current user method 11:49
115 API gateway current user controller 04:42
116 Refresh token method 11:44
117 Auth unit test mock 11:28
118 Current user read method unit test 14:39
119 Fix jest issue 06:11
120 Resend email test 08:15
121 Push to github 05:26
122 Elasticsearch and Kibana dashboard 11:57
123 Create gigs index 12:06
124 Add test data to gigs index 05:52
125 Get gig by id 05:52
126 Upload gigs data 06:58
127 Elaasticsearch API 10:34
128 Gigs search query - Part 1 11:19
129 Gigs search query - Part 2 12:26
130 Search controller 09:55
131 Search routes 02:39
132 API gateway auth search controller 12:52
133 Search http test 06:58
134 Auth seed controller - Part 1 13:29
135 Auth seed controller - Part 2 07:41
136 Auth seed http test 05:26
137 Push to github 01:50
138 Section introduction 05:44
139 Users service setup 04:03
140 Database connection 09:02
141 Elasticsearch connection 06:01
142 Server setup 06:59
143 Buyer schema 08:02
144 Seller schema - Part 1 10:09
145 Seller schema - Part 2 06:04
146 Seller validation scheme 06:32
147 Buyer service get methods 07:56
148 Buyer service update methods 05:20
149 Seller service get methods 07:44
150 Seller service update methods 15:12
151 Buyer gateway service 05:24
152 Seller gateway service 05:03
153 Rabbitmq queue connection and producer methods 08:49
154 Rabbitmq buyer message consumer method 12:48
155 Rabbitmq seller message consumer method 09:55
156 Rabbitmq review message consumer method 12:21
157 Buyer controller routes 11:55
158 Seller create and update controllers 11:26
159 Router definition order 05:05
160 Seller get controller 05:03
161 Seller seed controller - Part 1 11:51
162 Seller seed controller - Part 2 15:23
163 Seller gateway controller 09:37
164 Seed http test 07:01
165 Buyer unit test 13:44
166 Push to github 06:07
167 Section introduction 05:04
168 Gig service setup 06:44
169 Gig service folders 06:04
170 Elasticsearch add to index method 10:30
171 Elasticsearch update and delete methods 02:48
172 Gig schema - Part 1 10:45
173 Gig schema - Part 2 07:40
174 Rabbitmq queue connection 03:55
175 Gig service get methods 12:33
176 Gig service create method 10:38
177 Gig service delete and update methods 08:38
178 Update gig review method 04:53
179 Gig queue consumer methods 10:22
180 Create redis connection 07:08
181 Get category from redis cache method 07:33
182 Gig create controller 10:13
183 Add sortid to create method 04:31
184 Gig update controller 10:06
185 Gig get methods 07:00
186 Gig search methods 09:13
187 Elasticsearch more like this method 09:50
188 Top gigs method 12:56
189 Test top gig method 05:15
190 Search controller 11:51
191 Seed data method 13:37
192 Move seed data consumer method to server start queues method 01:31
193 Gig seed controller 08:00
194 Gig unit test 14:37
195 Gateway gig controllers 13:49
196 Gateway gig get controller 06:33
197 Fix gig routes 01:03
198 Gateway redis connection 04:56
199 Gateway cache methods 11:53
200 SocketIO setup 10:04
201 SocketIO events 11:18
202 Update current user controller 06:24
203 Push to github 05:01
204 Section introduction 04:30
205 Chat project setup 09:10
206 Chat service socketio information 03:41
207 Chat service socket connection 16:44
208 Start chat server 03:50
209 Conversation model 07:21
210 Message database model 08:04
211 Rabbitmq connection 04:59
212 Message service add message method 12:17
213 Get chat list method 12:12
214 Get user messages method 07:30
215 Mark messages method 06:03
216 Create message controller 12:58
217 Update get health controller 09:47
218 Chat service routes 05:42
219 Set default createdAt date 01:36
220 Chat create controller unit test 07:23
221 Chat gateway service 07:38
222 Chat gateway controller 11:40
223 Push to github 02:42
224 Section introduction 06:06
225 Service setup 05:32
226 Order model 09:14
227 Notification schema 05:27
228 Fix date in schema 00:53
229 Notification service 12:33
230 Get and create order methods 15:44
231 Approve and cancel order methods 11:27
232 Deliver order mthod 07:50
233 Extension request method 12:47
234 Update order review method 05:52
235 Order consumer rabbitmq method 07:23
236 Stripe account creation 08:28
237 Create stripe intent method - Part 1 12:19
238 Create stripe intent method - Part 2 11:21
239 Create order controller method 08:21
240 Update order controllers 09:56
241 Update deliver order method 05:30
242 Notification controllers 05:38
243 Order routes 07:34
244 Create order unit test 13:34
245 Create controller order method unit test 08:34
246 Gateway order controller and routes 13:14
247 Fix order routes 01:01
248 Push code to github 02:14
249 Section introduction 02:35
250 Service setup 04:35
251 Postgres database connection 12:30
252 Review database table 12:02
253 Create review method 10:50
254 Rabbitmq producer 06:36
255 Get reviews methods 05:42
256 Review controller 09:29
257 Create review method unit test 10:16
258 Gateway review controller 08:31
259 Gateway current user controller unit test - Part 1 09:04
260 Gateway current user controller unit test - Part 2 09:50
261 Push to github 01:31
262 Metric beats docker service 11:52
263 Run metricbeat service 10:21
264 Heartbeat docker service 14:23
265 Run heartbeat service 05:01
266 Update elasticsearch and kibana in docker compose file 14:28
267 Create kibana service token 11:09
268 APM server setup 11:12
269 APM nodejs client setup 10:52
270 Run apm server 07:12
271 Kubernetes fundamentals 09:28
272 Kubernetes components 08:00
273 Kubernetes objects 13:02
274 Minikube installation 09:46
275 Lens IDE 08:27
276 Minikube vs. Cloud resources 02:44
277 Redis kubernetes objects 13:16
278 Redis statefulsets 14:15
279 Rabbitmq kubernetes object 12:24
280 Update Rabbitmq kubernetes object 14:09
281 MySQL kubernetes object - Part 1 12:40
282 MySQL kubernetes object - Part 2 07:14
283 Postgres kubernetes object 06:32
284 Update postgres kubernetes objects 04:26
285 Mongodb kubernetes object 07:16
286 Elasticsearch kubernetes object 14:11
287 Kibana kubernetes object 10:22
288 Apply kibana objects 08:35
289 Create secrets file 15:25
290 Use secrets 07:28
291 Import express async errors 01:15
292 Build gateway service docker image 12:15
293 Review service kubernetes objects 12:48
294 Order and chat services kubernetes objects 04:37
295 API gateway kubernetes objects 10:03
296 API gateway ingress 12:04
297 Dynamically set sameSite property to gateway microservice 02:23
298 Run api gateway ingress 09:58
299 Generate self-signed certificates 16:42
300 Create gateway tls secret 12:07
301 Remove whitespace from secrets 04:02
302 Update gateway ingress 04:52
303 Kibana ingress 09:49
304 Kibana configmap 13:34
305 Change kibana user password 11:15
306 Elasticsearch heartbeat object 14:03
307 View heartbeat on kibana dashboard 01:48
308 Elasticsearch metricbeart object 06:04
309 View metricbeat on kibana dashboard 03:29
310 Port forward to access MySQl and MongoDB 07:09
311 Jenkins docker service 06:40
312 Jenkins agent docker service 12:15
313 Add Jenkins agent as node 08:49
314 Install docker on jenkins agent 08:12
315 Install plugins 13:20
316 Create minikube kubernetes token 13:15
317 Review service jenkinsfile 10:54
318 Review service jenkins pipeline 14:41
319 Docker image pipeline build stage 10:12
320 Reusable groovy functions 14:43
321 Create slack webhook 06:19
322 Create jenkins file post actions 10:46
323 Add kubernetes stage to pipeline 09:31
324 Test kubernetes pipeline stage 06:24
325 Github webhooks 09:49
326 Setup order service pipeline 06:53
327 Microservice eks cluster architecture 13:25
328 AWS cost 08:21
329 Install aws cli 08:22
330 Create VPC and subnets 09:28
331 Tag public subnets 05:28
332 Create NAT gateway 07:06
333 Create security groups 08:43
334 Add k8s objects files 03:45
335 Create EBS CSI driver role 13:19
336 Install aws ebs-csi driver 05:50
337 Update rabbitmq storage class and persistent volume 05:28
338 Create mysql rds instance 11:39
339 Create postgres rds instance 06:37
340 Install eksctl 07:46
341 Eksctl introduction 07:04
342 Create kubernetes cluster with eksctl 08:47
343 Create kubernetes cluster nodegroup with eksctl 13:53
344 View worker nodes 06:25
345 Create elasticsearch cloud deployment 04:18
346 Add elasticsearch url to secrets 10:06
347 Create redis cluster on aws 08:33
348 Create mongodb cloud database 06:36
349 Apply API gateway kubernetes deployment 02:28
350 Fix postgres connection issue 04:51
351 Dynamically set postgres connection ssl property 02:22
352 Add new env variable to review microservice 04:37
353 AWS route53 hosted zones 11:35
354 Apply gateway objects 05:44
355 Create application load balancer controller service account 11:18
356 Install ALB controller with helm 12:36
357 Add annotations to gateway ingress 12:42
358 Create gateway application load balancer ingress 11:32
359 Create gateway external DNS service account 12:17
360 Create gateway external DNS 11:48
361 Run elasticsearch heartbeat and metricbeat 09:25
362 Test endpoints 04:32
363 Create EC2 jenkins master 09:29
364 Install jenkins on EC2 jenkins master 13:10
365 Access jenkins master dashboard 02:27
366 Setup jenkins agent 08:11
367 Setup ssh connection between jenkins master and agent 10:00
368 Install nodejs and docker 06:28
369 Jenkins aws service account token 10:11
370 Create review service pipeline 07:10
371 View review service pipeline logs 03:24
372 Create github webhook 02:50
373 Create EBS CSI driver role 13:19
374 Install aws ebs-csi driver 05:50
375 Install prometheus with helm 08:35
376 Setup prometheus ingress 10:48
377 Setup external DNS for prometheus 08:33
378 Prometheus host 01:51
379 Install grafana with helm 07:41
380 Setup grafana ingress 06:50
381 View grafana dashboard 08:34
382 Setup project with vite 07:19
383 Update vite config file 10:06
384 Add prettier and eslint 05:29
385 App folder structure 06:05
386 Install tailwindcss 08:38
387 Section introduction 00:42
388 Create index component 06:13
389 Create app router component 08:10
390 React code splitting concept 08:02
391 Button component 08:32
392 Index header component 13:38
393 Hero component 07:47
394 Hero component text animation 09:30
395 Text input component 10:58
396 Utils service file 07:33
397 Remove shared library 08:10
398 Gig tabs component 12:10
399 Gig tabs items 10:37
400 Categories components 13:48
401 Modal background component 06:19
402 Alert component 09:44
403 Dropdown component 15:20
404 Login modal component 13:05
405 Register modal component 07:48
406 Setup redux store 10:17
407 Use redux store file 07:26
408 RTK query setup 14:19
409 RTK create api method 06:20
410 Authentication service 14:20
411 Register component implementation 13:18
412 Register component country dropdown 10:37
413 Register component profile picture 14:43
414 Validate registration user data 13:47
415 Create new user method 10:42
416 Fix RTK query issues 03:44
417 Create auth reducer 09:54
418 Logout reducer 07:57
419 Login user 09:18
420 Forgot password 10:32
421 Reset password 13:36
422 Reset user password testing 05:47
423 Confirm email 10:30
424 Home header component 11:38
425 Check current user query 11:46
426 App page component conditionals 11:53
427 Logout method 13:18
428 Add gateway service logout route 07:29
429 Setup protected route component 10:24
430 Display banner component 12:44
431 Slider component - Part 1 12:26
432 Slider component - Part 2 07:47
433 Home gigs view component 09:21
434 Featured sellers component 07:12
435 Star rating component 11:10
436 Error component 03:50
437 Buyer dashboard route 07:07
438 Buyer dashboard component 12:23
439 Buyer table component 14:39
440 Buyer reducer 07:12
441 Settings dropdown component 13:01
442 Detect outside click hook 12:14
443 Fix settings dropdown items 03:31
444 Create breadcrumb component 09:30
445 Add new seller component 09:52
446 Personal info component 10:35
447 Get personal info data 15:44
448 Seller experience fields component 10:55
449 Seller experience fields onchange method 12:40
450 Add and remove fields 13:03
451 Handle fields change method 05:18
452 Seller education fields 12:07
453 Add other seller fields 05:14
454 Seller service methods 11:25
455 Seller validation 11:35
456 Seller onCreate method 14:52
457 Dispatch seller inside app page component 13:52
458 Fix email verification issue 10:23
459 Fix dynamic input text issue 15:38
460 Update settings dropdown 03:22
461 Add profile header component 10:30
462 Profile header gig info 11:01
463 Fullname update fields 12:02
464 Display star ratings 10:13
465 Install react fast compare package 07:15
466 Profile tabs components 09:09
467 Seller Context 08:43
468 Edit language components 13:13
469 Handle update method 12:34
470 Use language edit fields 09:59
471 About me component 10:31
472 Social links component 13:27
473 Use social links component 09:51
474 Certificates components 10:19
475 Certificate edit fields 17:11
476 Description component 10:03
477 Experience and education components 02:06
478 Show experience and education components 08:57
479 Skill fields component 11:48
480 Skills component properties 12:06
481 Create toast method 06:03
482 Seller update method 09:05
483 Import toast component styles 01:23
484 View seller profile page 09:57
485 Seller dashboard header component 14:02
486 Header reducer 14:01
487 Manage earnings component 14:12
488 Manage earnings table component 09:48
489 Manage orders component 12:14
490 Manage orders table body 07:43
491 Seller dashboard component 14:57
492 Active orders table 08:18
493 Add circular page loader to app page 12:40
494 Update featured expert component on home page 09:05
495 Add index component suspense fallback 02:07
496 Add gig component 12:03
497 Setup react quill 15:43
498 Add category dropdown 07:40
499 Tags input component - Part 1 14:44
500 Tags input component - Part 2 14:38
501 Search tags field 03:19
502 Characters validation 06:30
503 Cover image selection 09:52
504 Gig validation hook 14:26
505 Approval modal component 15:11
506 Gig create method 13:20
507 Gig view component 14:07
508 Gig context 07:05
509 Gig right package - Part 1 12:29
510 Gig right package - Part 2 07:10
511 Gig view seller component 14:06
512 Gig related tags component 05:16
513 Gig overview and about components 10:28
514 Html parser component 10:19
515 Gig view reviews 07:58
516 Gigs search result components 09:34
517 Budget dropdown component 15:50
518 Delivery time component 12:59
519 Gig card display item component 13:16
520 Search gigs query 13:36
521 Use gig display item component 14:53
522 Fix budget min and max issue 03:47
523 Gig paginate component 15:29
524 Use gig paginate component 09:27
525 Add gig card display item to seller profile 10:22
526 Top gigs view component 14:33
527 Add top gigs view component to home page 13:13
528 Top gigs slide methods 10:27
529 Gig card item component 12:10
530 Gig card item methods - Part 1 15:07
531 Gig card item methods - Part 2 07:59
532 Edit gig component 16:14
533 Main chat and chatbox components 14:30
534 Scroll to bottom hook 07:09
535 Message query in chatbox component 13:36
536 Use save chat message in chatbox component 13:09
537 Chatbox form 08:07
538 Message dropdown component 15:20
539 Add message dropdown to home header 07:48
540 Fix chat conversation bug 05:20
541 Setup socketio client 14:47
542 Emit socket events in components 10:36
543 Chat list component 15:27
544 Chat list select user method 15:23
545 Chat utils - Part 1 14:10
546 Chat utils - Part 2 07:53
547 Chat window component 11:35
548 Display receiver username in chat window 12:38
549 Chat image preview component 10:47
550 Use chat image preview component 14:24
551 Offer modal component 15:35
552 Use offer modal component 07:57
553 Chat offer component 12:39
554 Use chat offer component 06:21
555 Chat file component 12:46
556 Add download file method to chat file component 03:22
557 Send message method in chat window component 13:10
558 Notification reducer 14:52
559 Mobile header components 06:19
560 Index header sidebar 13:23
561 Checkout form Component 16:08
562 Checkout form handle submit method 15:05
563 Checkout component 14:09
564 Payment intent method and requirements component 11:59
565 Download order invoice 15:18
566 Start order method 11:06
567 Order component 14:37
568 Count down timer hook 17:08
569 Extend delivery modal 16:00
570 Delivery work modal 15:37
571 Order details table component 14:20
572 Order activities component 14:04
573 Order placed component 08:37
574 Order extension component 15:13
575 Order delivered component 07:58
576 Order review component 08:54
577 Fix review microservice bug 03:12
578 Update buyer and seller order tables 12:09
579 Get seller reviews 16:27
580 Gig reviews issue 10:48
581 Remapped review response in review microservice 03:29
582 Order dropdown component 15:30
583 Notifications dropdown 20:56
584 Before window unload hook 08:46
585 Settings and change password components 15:22
586 Settings service 08:22
587 Fix change password bug 09:59
588 Fetch base query error method 07:41
589 Gig index item component 11:07
590 Gig index display 17:20
591 Gig index info display 07:04
592 NPM run build command 07:48
593 NGINX config - Part 1 14:12
594 NGINX config - Part 2 07:19
595 Setup dockerfile 11:10
596 Docker build and push image 02:39
597 Create frontend kubernetes objects on minikube 08:33
598 Create self-signed certificates for frontend ingress 12:59
599 Frontend minikube ingress 06:34
600 View frontend application on browser 02:14
601 Push code to github 07:21
602 Add stripe api key to jenkins 04:07
603 Create frontend jenkins pipeline 16:29
604 Install APM RUM package in React 03:17
605 Make changes to frontend ENV file 05:16
606 Install elastic apm node package 02:47
607 Add APM server url to ENV file 04:11
608 Create frontend kubernetes objects on AWS EKS cluster 10:18
609 Create frontend deployment and ingress 03:47
610 Move require to index html file in react 15:00
611 Fix api gateway client url 10:32
612 Update frontend ingress host 01:25

Similar courses to Microservices with NodeJS, React, Typescript and Kubernetes

React, NodeJS, Express & MongoDB - The MERN Fullstack Guide

React, NodeJS, Express & MongoDB - The MERN Fullstack Guide

Duration 18 hours 45 minutes 10 seconds
React - The Complete Guide

React - The Complete Guide

Duration 47 hours 42 minutes 41 seconds
Full-Stack React with GraphQL and Apollo Boost

Full-Stack React with GraphQL and Apollo Boost

Duration 6 hours 54 minutes 31 seconds
React - The Complete Guide 2024

React - The Complete Guide 2024

Duration 57 hours 11 minutes 22 seconds
TypeScript Interview Questions - Coding Interview 2023

TypeScript Interview Questions - Coding Interview 2023

Duration 2 hours 56 minutes 26 seconds
The Ultimate TypeScript Course

The Ultimate TypeScript Course

Duration 4 hours 22 minutes 18 seconds
Complete DApp - Solidity & React - Blockchain Development

Complete DApp - Solidity & React - Blockchain Development

Duration 15 hours 21 minutes 24 seconds
Create the Best Discord Bot with Node.js

Create the Best Discord Bot with Node.js

Duration 12 hours 36 minutes 36 seconds
React, NextJS and NestJS: A Rapid Guide - Advanced

React, NextJS and NestJS: A Rapid Guide - Advanced

Duration 8 hours 40 minutes 51 seconds