Section 1 : Fundamental Ideas Around Microservices

Lecture 1 INTRODUCTION TO BRAINMEASURES PROCTOR SYSTEM
Lecture 2 About Certification
Lecture 3 Course Resources
Lecture 4 What Is a Microservice 00:03:19 Duration
Lecture 5 Data in Microservices 00:07:34 Duration
Lecture 6 Big Problems with Data 00:05:08 Duration
Lecture 7 Sync Communication Between Services 00:06:53 Duration
Lecture 8 Event-Based Communication 00:05:19 Duration
Lecture 9 A Crazy Way of Storing Data 00:09:48 Duration
Lecture 10 Pros and Cons of Async Communication 00:06:15 Duration

Section 2 : A Mini-Microservices App

Lecture 1 App Overview 00:05:43 Duration
Lecture 2 Project Setup 00:04:57 Duration
Lecture 3 Posts Service Creation 00:08:18 Duration
Lecture 4 Testing the Posts Service 00:04:04 Duration
Lecture 5 Implementing a Comments Service 00:08:22 Duration
Lecture 6 Quick Comments Test 00:03:57 Duration
Lecture 7 Note on the React App
Lecture 8 Suggestion Regarding a Default Export Warning
Lecture 9 React Project Setup 00:05:00 Duration
Lecture 10 Building Post Submission 00:09:54 Duration
Lecture 11 building-post
Lecture 12 Handling CORS Errors 00:04:08 Duration
Lecture 13 Fetching and Rendering Posts 00:10:04 Duration
Lecture 14 Creating Comments 00:08:09 Duration
Lecture 15 Displaying Comments 00:07:23 Duration
Lecture 16 Completed React App
Lecture 17 Request Minimization Strategies 00:04:54 Duration
Lecture 18 An Async Solution 00:07:16 Duration
Lecture 19 Common Questions Around Async Events 00:04:14 Duration
Lecture 20 Event Bus Overview 00:05:14 Duration
Lecture 21 Important Note about Node v15 and Unhandled Promise Rejections
Lecture 22 A Basic Event Bus Implementation 00:05:22 Duration
Lecture 23 Emitting Events 00:05:18 Duration
Lecture 24 Emitting Comment Creation Events 00:03:45 Duration
Lecture 25 Receiving Events 00:04:32 Duration
Lecture 26 Creating the Data Query Service 00:04:42 Duration
Lecture 27 Parsing Incoming Events 00:07:02 Duration
Lecture 28 Using the Query Service 00:07:09 Duration
Lecture 29 Adding a Simple Feature 00:04:46 Duration
Lecture 30 Issues with Comment Filtering 00:07:43 Duration
Lecture 31 A Second Approach 00:05:37 Duration
Lecture 32 How to Handle Resource Updates 00:04:45 Duration
Lecture 33 Creating the Moderation Service 00:04:52 Duration
Lecture 34 Adding Comment Moderation 00:04:26 Duration
Lecture 35 Reminder about Node v15 and Error Catching
Lecture 36 Handling Moderation 00:05:29 Duration
Lecture 37 Updating Comment Content 00:04:58 Duration
Lecture 38 A Quick Test 00:05:57 Duration
Lecture 39 Rendering Comments by Status 00:03:26 Duration
Lecture 40 Dealing with Missing Events 00:10:23 Duration
Lecture 41 Required Node v15+ Update for Query Service
Lecture 42 Implementing Event Sync 00:06:11 Duration
Lecture 43 Event Syncing in Action 00:04:16 Duration

Section 3 : Running Services with Docker

Lecture 1 Deployment Issues 00:06:55 Duration
Lecture 2 Why Docker 00:02:55 Duration
Lecture 3 Why Kubernetes 00:05:47 Duration
Lecture 4 Don't Know Docker Watch This 00:01:17 Duration
Lecture 5 Note About Docker Build Output and Buildkit
Lecture 6 Dockerizing the Posts Service 00:04:02 Duration
Lecture 7 Review Some Basic Commands 00:05:23 Duration
Lecture 8 Dockering Other Services 00:03:00 Duration

Section 4 : Orchestrating Collections of Services with Kubernetes

Lecture 1 Installing Kubernetes 00:03:19 Duration
Lecture 2 IMPORTANT Note for Minikube and MicroK8s Users
Lecture 3 A Kubernetes Tour 00:09:45 Duration
Lecture 4 Important Kubernetes Terminology 00:02:51 Duration
Lecture 5 Notes on Config Files 00:03:11 Duration
Lecture 6 Creating a Pod 00:06:41 Duration
Lecture 7 ErrImagePull, ErrImageNeverPull and ImagePullBackoff Errors
Lecture 8 Understanding a Pod Spec 00:05:15 Duration
Lecture 9 Common Kubectl Commands 00:04:44 Duration
Lecture 10 A Time-Saving Alias 00:02:26 Duration
Lecture 11 Introducing Deployments 00:03:27 Duration
Lecture 12 Creating a Deployment 00:06:11 Duration
Lecture 13 Common Commands Around Deployments 00:04:35 Duration
Lecture 14 Updating Deployments 00:06:02 Duration
Lecture 15 Preferred Method for Updating Deployments 00:05:42 Duration
Lecture 16 Networking With Services 00:04:15 Duration
Lecture 17 Creating a NodePort Service 00:07:52 Duration
Lecture 18 Accessing NodePort Services 00:05:09 Duration
Lecture 19 Setting Up Cluster IP Services 00:03:12 Duration
Lecture 20 Building a Deployment for the Event Bus 00:05:35 Duration
Lecture 21 Adding ClusterIP Services 00:07:37 Duration
Lecture 22 How to Communicate Between Services 00:04:09 Duration
Lecture 23 Updating Service Addresses 00:06:27 Duration
Lecture 24 Verifying Communication 00:05:00 Duration
Lecture 25 Adding Query, Moderation and Comments 00:09:57 Duration
Lecture 26 Testing Communication 00:05:29 Duration
Lecture 27 Load Balancer Services 00:05:13 Duration
Lecture 28 Load Balancers and Ingress 00:06:38 Duration
Lecture 29 Update on Ingress Nginx Mandatory Commands
Lecture 30 Installing Ingress-Nginx 00:07:40 Duration
Lecture 31 Ingress v1 API Required Update
Lecture 32 Writing Ingress Config Files 00:04:47 Duration
Lecture 33 Important Note About Port 80
Lecture 34 Hosts File Tweak 00:06:15 Duration
Lecture 35 Important Note to Add Environment Variable
Lecture 36 Deploying the React App 00:06:09 Duration
Lecture 37 Unique Route Paths 00:06:55 Duration
Lecture 38 Final Route Config 00:06:32 Duration
Lecture 39 Introducing Skaffold 00:03:08 Duration
Lecture 40 Skaffold Setup 00:09:17 Duration
Lecture 41 First Time Skaffold Startup 00:01:00 Duration
Lecture 42 A Few Notes on Skaffold 00:06:30 Duration

Section 5 : Architecture of Multi-Service Apps

Lecture 1 Big Ticket Items 00:15:11 Duration
Lecture 2 App Overview 00:08:53 Duration
Lecture 3 Resource Types 00:03:23 Duration
Lecture 4 Service Types 00:03:37 Duration
Lecture 5 Note on Typescript
Lecture 6 Events and Architecture Design 00:03:48 Duration
Lecture 7 Auth Service Setup 00:04:50 Duration
Lecture 8 Auth K8s Setup
Lecture 9 Note on Code Reloading
Lecture 10 Ingress v1 API Required Update
Lecture 11 Adding Skaffold 00:05:36 Duration
Lecture 12 Ingress-Nginx Setup 00:07:19 Duration
Lecture 13 Hosts File and Security Warning 00:04:05 Duration

Section 6 : Leveraging a Cloud Environment for Development

Lecture 1 Note on Remote Development 00:02:51 Duration
Lecture 2 Remote Dev with Skaffold 00:06:35 Duration
Lecture 3 Free Google Cloud Credits
Lecture 4 Google Cloud Initial Setup 00:02:43 Duration
Lecture 5 Kubernetes Cluster Creation 00:03:59 Duration
Lecture 6 Kubectl Contexts 00:03:49 Duration
Lecture 7 Initializing the GCloud SDK 00:05:03 Duration
Lecture 8 Installing the GCloud Context 00:04:17 Duration
Lecture 9 Updating the Skaffold Config 00:04:34 Duration
Lecture 10 More Skaffold Updates 00:01:06 Duration
Lecture 11 Creating a Load Balancer 00:05:12 Duration
Lecture 12 Final Config and Test 00:06:25 Duration

Section 7 : Response Normalization Strategies

Lecture 1 Creating Route Handlers 00:05:40 Duration
Lecture 2 Scaffolding Routes 00:04:05 Duration
Lecture 3 Adding Validation 00:08:38 Duration
Lecture 4 Handling Validation Errors 00:06:18 Duration
Lecture 5 Postman HTTPS Issues
Lecture 6 Surprising Complexity Around Errors 00:06:06 Duration
Lecture 7 Other Sources of Errors 00:04:17 Duration
Lecture 8 Solution for Error Handling 00:04:50 Duration
Lecture 9 Building an Error Handling Middleware 00:07:38 Duration
Lecture 10 Communicating More Info to the Error Handler 00:05:23 Duration
Lecture 11 Encoding More Information In an Error 00:04:35 Duration
Lecture 12 Subclassing for Custom Errors 00:08:17 Duration
Lecture 13 Determining Error Type 00:03:10 Duration
Lecture 14 Converting Errors to Responses 00:10:12 Duration
Lecture 15 Moving Logic Into Errors 00:08:36 Duration
Lecture 16 Verifying Our Custom Errors
Lecture 17 Final Error Related Code 00:10:19 Duration
Lecture 18 How to Define New Custom Errors 00:05:01 Duration
Lecture 19 Uh Oh 00:05:49 Duration

Section 8 : Database Management and Modeling

Lecture 1 Creating Databases in Kubernetes 00:08:25 Duration
Lecture 2 Connecting to MongoDB 00:07:53 Duration
Lecture 3 Understanding the Signup Flow 00:04:25 Duration
Lecture 4 Getting TypeScript and Mongoose to Cooperate 00:05:21 Duration
Lecture 5 Creating the User Model 00:04:54 Duration
Lecture 6 Type Checking User Properties 00:06:01 Duration
Lecture 7 Adding Static Properties to a Model 00:06:00 Duration
Lecture 8 Defining Extra Document Properties 00:04:53 Duration
Lecture 9 What's That Angle Bracket For 00:03:52 Duration
Lecture 10 User Creation 00:06:47 Duration
Lecture 11 Proper Error Handling 00:07:25 Duration
Lecture 12 Note on Password Hashing
Lecture 13 Reminder on Password Hashing 00:04:58 Duration
Lecture 14 Adding Password Hashing 00:06:57 Duration
Lecture 15 Comparing Hashed Password 00:02:54 Duration
Lecture 16 Mongoose Pre-Save Hooks 00:05:53 Duration

Section 9 : Authentication Strategies and Options

Lecture 1 Fundamental Authentication Strategies 00:08:58 Duration
Lecture 2 Huge Issues with Authentication Strategies 00:07:32 Duration
Lecture 3 So Which Option 00:02:58 Duration
Lecture 4 Solving Issues with Option #2 00:08:26 Duration
Lecture 5 Reminder on Cookies vs JWT's 00:06:21 Duration
Lecture 6 Microservices Auth Requirements 00:11:00 Duration
Lecture 7 Issues with JWT's and Server Side Rendering
Lecture 8 Cookies and Encryption 00:04:51 Duration
Lecture 9 Adding Session Support 00:03:11 Duration
Lecture 10 Generating a JWT 00:08:29 Duration
Lecture 11 JWT Signing Keys 00:04:56 Duration
Lecture 12 Securely Storing Secrets with Kubernetes 00:02:13 Duration
Lecture 13 Creating and Accessing Secrets 00:09:18 Duration
Lecture 14 Accessing Env Variables in a Pod 00:05:18 Duration
Lecture 15 Common Response Properties 00:04:41 Duration
Lecture 16 Formatting JSON Properties 00:10:38 Duration
Lecture 17 The Signin Flow 00:07:49 Duration
Lecture 18 Common Request Validation Middleware 00:05:33 Duration
Lecture 19 Sign In Logic 00:06:49 Duration
Lecture 20 Quick Sign In Test 00:01:53 Duration
Lecture 21 Current User Handler 00:03:01 Duration
Lecture 22 Returning the Current User 00:08:55 Duration
Lecture 23 Signing Out 00:02:48 Duration
Lecture 24 Creating a Current User Middleware 00:06:55 Duration
Lecture 25 Augmenting Type Definitions 00:07:46 Duration
Lecture 26 Requiring Auth for Route Access 00:07:46 Duration

Section 10 : Testing Isolated Microservices

Lecture 1 Scope of Testing 00:04:28 Duration
Lecture 2 Testing Goals 00:04:32 Duration
Lecture 3 Testing Architecture 00:07:51 Duration
Lecture 4 Index to App Refactor 00:02:54 Duration
Lecture 5 A Few Dependencies 00:03:33 Duration
Lecture 6 Test Environment Setup 00:08:11 Duration
Lecture 7 Our First Test 00:06:24 Duration
Lecture 8 An Important Note 00:01:31 Duration
Lecture 9 Testing Invalid Input 00:05:13 Duration
Lecture 10 Requiring Unique Emails 00:01:45 Duration
Lecture 11 Changing Node Env During Tests 00:05:43 Duration
Lecture 12 Tests Around Sign In Functionality 00:06:26 Duration
Lecture 13 Testing Sign Out 00:04:31 Duration
Lecture 14 Issues with Cookies During Testing 00:05:18 Duration
Lecture 15 Easy Auth Solution 00:03:03 Duration
Lecture 16 globalThis has no index signature TS Error
Lecture 17 Auth Helper Function 00:07:12 Duration
Lecture 18 Testing Non-Authed Requests 00:01:44 Duration

Section 11 : Integrating a Server-Side-Rendered React App

Lecture 1 Starting the React App 00:02:11 Duration
Lecture 2 Reminder on Server Side Rendering 00:03:38 Duration
Lecture 3 Suggestion Regarding a Default Export Warning
Lecture 4 Basics of Next JS 00:05:24 Duration
Lecture 5 Building a Next Image 00:04:28 Duration
Lecture 6 Running Next in Kubernetes 00:10:12 Duration
Lecture 7 Note on File Change Detection 00:04:26 Duration
Lecture 8 Adding Global CSS 00:05:09 Duration
Lecture 9 Adding a Sign Up Form 00:03:11 Duration
Lecture 10 Handling Email and Password Inputs 00:03:42 Duration
Lecture 11 Successful Account Signup 00:05:12 Duration
Lecture 12 Handling Validation Errors 00:06:53 Duration
Lecture 13 The useRequest Hook 00:06:59 Duration
Lecture 14 Using the useRequest Hook 00:03:40 Duration
Lecture 15 An onSuccess Callback 00:05:37 Duration
Lecture 16 Overview on Server Side Rendering 00:06:47 Duration
Lecture 17 A note about ECONNREFUSED errors
Lecture 18 Fetching Data During SSR 00:05:07 Duration
Lecture 19 Why the Error 00:09:00 Duration
Lecture 20 Two Possible Solutions 00:07:04 Duration
Lecture 21 Cross Namespace Service Communication 00:07:45 Duration
Lecture 22 When is GetInitialProps Called 00:06:46 Duration
Lecture 23 On the Server or the Browser 00:02:01 Duration
Lecture 24 Ingress-Nginx Namespace and Service - Important Update
Lecture 25 Specifying the Host 00:08:23 Duration
Lecture 26 Passing Through the Cookies 00:04:00 Duration
Lecture 27 A Reusable API Client 00:07:05 Duration
Lecture 28 Content on the Landing Page 00:02:01 Duration
Lecture 29 The Sign In Form 00:03:11 Duration
Lecture 30 A Reusable Header 00:05:00 Duration
Lecture 31 Moving GetInitialProps 00:02:11 Duration
Lecture 32 Issues with Custom App GetInitialProps 00:06:41 Duration
Lecture 33 Handling Multiple GetInitialProps 00:06:07 Duration
Lecture 34 Passing Props Through 00:03:03 Duration
Lecture 35 Building the Header 00:05:05 Duration
Lecture 36 Conditionally Showing Links 00:05:58 Duration
Lecture 37 Signing Out 00:04:36 Duration
Lecture 38 React App Catchup

Section 12 : Code Sharing and Reuse Between Services

Lecture 1 Shared Logic Between Services 00:04:34 Duration
Lecture 2 Options for Code Sharing 00:04:46 Duration
Lecture 3 NPM Organizations 00:04:27 Duration
Lecture 4 Publishing NPM Modules 00:04:06 Duration
Lecture 5 Project Setup 00:07:34 Duration
Lecture 6 Typo in package
Lecture 7 An Easy Publish Command 00:07:26 Duration
Lecture 8 Relocating Shared Code 00:07:29 Duration
Lecture 9 Updating Import Statements 00:05:16 Duration
Lecture 10 Updating the Common Module 00:05:34 Duration

Section 13 : Create-Read-Update-Destroy Server Setup

Lecture 1 Ticketing Service Overview 00:03:02 Duration
Lecture 2 Project Setup 00:05:24 Duration
Lecture 3 Running the Ticket Service 00:06:04 Duration
Lecture 4 Mongo Connection URI 00:08:13 Duration
Lecture 5 Quick Auth Update 00:01:47 Duration
Lecture 6 Test-First Approach 00:04:19 Duration
Lecture 7 Creating the Router 00:04:56 Duration
Lecture 8 Adding Auth Protection 00:08:04 Duration
Lecture 9 Faking Authentication During Tests 00:07:09 Duration
Lecture 10 globalThis has no index signature TS Error
Lecture 11 Building a Session 00:05:39 Duration
Lecture 12 Testing Request Validation 00:04:12 Duration
Lecture 13 Validating Title and Price 00:04:09 Duration
Lecture 14 Reminder on Mongoose with TypeScript 00:07:11 Duration
Lecture 15 Defining the Ticket Model 00:03:48 Duration
Lecture 16 Creation via Route Handler 00:08:21 Duration
Lecture 17 Testing Show Routes 00:06:52 Duration
Lecture 18 Unexpected Failure! 00:05:29 Duration
Lecture 19 What's that Error! 00:08:57 Duration
Lecture 20 Better Error Logging 00:05:11 Duration
Lecture 21 Complete Index Route Implementation 00:06:31 Duration
Lecture 22 Ticket Updating 00:06:14 Duration
Lecture 23 Handling Updates 00:04:15 Duration
Lecture 24 Permission Checking 00:06:49 Duration
Lecture 25 Final Update Changes 00:09:04 Duration
Lecture 26 Manual Testing 00:05:36 Duration

Section 14 : NATS Streaming Server - An Event Bus Implementation

Lecture 1 What Now 00:02:50 Duration
Lecture 2 Three Important Items 00:04:34 Duration
Lecture 3 Creating a NATS Streaming Deployment 00:06:25 Duration
Lecture 4 Big Notes on NATS Streaming
Lecture 5 Building a NATS Test Project 00:07:31 Duration
Lecture 6 Port-Forwarding with Kubectl 00:04:40 Duration
Lecture 7 Publishing Events
Lecture 8 mall Required Command Change
Lecture 9 Listening For Data 00:06:55 Duration
Lecture 10 Accessing Event Data 00:06:56 Duration
Lecture 11 Client ID Generation 00:04:48 Duration
Lecture 12 Queue Groups 00:07:28 Duration
Lecture 13 Manual Ack Mode 00:09:51 Duration
Lecture 14 Client Health Checks 00:09:45 Duration
Lecture 15 Graceful Client Shutdown
Lecture 16 Core Concurrency Issues 00:12:55 Duration
Lecture 17 Common Questions 00:08:08 Duration
Lecture 18 [Optional] More Possible Concurrency Solutions 00:16:42 Duration
Lecture 19 Solving Concurrency Issues 00:20:05 Duration
Lecture 20 Concurrency Control with the Tickets App 00:09:40 Duration
Lecture 21 Event Redelivery 00:04:34 Duration
Lecture 22 Durable Subscriptions 00:08:59 Duration

Section 15 : Connecting to NATS in a Node JS World

Lecture 1 Reusable NATS Listeners 00:04:32 Duration
Lecture 2 The Listener Abstract Class 00:09:27 Duration
Lecture 3 Extending the Listener 00:05:53 Duration
Lecture 4 Quick Refactor 00:03:17 Duration
Lecture 5 Leveraging TypeScript for Listener Validation 00:05:28 Duration
Lecture 6 Subjects Enum 00:03:28 Duration
Lecture 7 Custom Event Interface 00:02:26 Duration
Lecture 8 Enforcing Listener Subjects 00:07:22 Duration
Lecture 9 Quick Note 'readonly' in Typescript
Lecture 10 Enforcing Data Types 00:03:53 Duration
Lecture 11 Where Does this Get Used 00:02:49 Duration
Lecture 12 Custom Publisher 00:08:11 Duration
Lecture 13 Using the Custom Publisher 00:03:49 Duration
Lecture 14 Awaiting Event Publication 00:04:27 Duration
Lecture 15 Common Event Definitions Summary 00:06:26 Duration
Lecture 16 Updating the Common Module 00:07:35 Duration
Lecture 17 Restarting NATS 00:02:09 Duration

Section 16 : Managing a NATS Client

Lecture 1 Publishing Ticket Creation 00:03:48 Duration
Lecture 2 More on Publishing 00:03:19 Duration
Lecture 3 NATS Client Singleton 00:05:24 Duration
Lecture 4 Remember Mongoose 00:04:57 Duration
Lecture 5 TS Error - Did you forget to include 'void' in your type argument
Lecture 6 Singleton Implementation 00:09:04 Duration
Lecture 7 Accessing the NATS Client 00:04:28 Duration
Lecture 8 Graceful Shutdown 00:06:55 Duration
Lecture 9 Successful Listen! 00:03:23 Duration
Lecture 10 Ticket Update Publishing 00:04:28 Duration
Lecture 11 Failed Event Publishing 00:07:03 Duration
Lecture 12 Handling Publish Failures 00:06:02 Duration
Lecture 13 Fixing a Few Tests 00:03:52 Duration
Lecture 14 Redirecting Imports 00:05:35 Duration
Lecture 15 Providing a Mock Implementation 00:09:09 Duration
Lecture 16 Test-Suite Wide Mocks 00:02:12 Duration
Lecture 17 Ensuring Mock Invocations 00:09:13 Duration
Lecture 18 NATS Env Variables 00:08:00 Duration

Section 17 : Cross-Service Data Replication In Action

Lecture 1 The Orders Service 00:05:02 Duration
Lecture 2 Scaffolding the Orders Service 00:04:39 Duration
Lecture 3 A Touch More Setup 00:07:32 Duration
Lecture 4 Ingress Routing Rules 00:01:53 Duration
Lecture 5 Scaffolding a Few Route Handlers 00:09:55 Duration
Lecture 6 Subtle Service Coupling 00:06:43 Duration
Lecture 7 Associating Orders and Tickets 00:06:49 Duration
Lecture 8 Order Model Setup 00:08:52 Duration
Lecture 9 The Need for an Enum 00:05:55 Duration
Lecture 10 Creating an Order Status Enum 00:08:31 Duration
Lecture 11 More on Mongoose Refs 00:02:58 Duration
Lecture 12 Defining the Ticket Model 00:07:09 Duration
Lecture 13 Order Creation Logic 00:05:45 Duration
Lecture 14 Finding Reserved Tickets 00:06:10 Duration
Lecture 15 Convenience Document Methods 00:07:37 Duration
Lecture 16 Order Expiration Times 00:06:05 Duration
Lecture 17 globalThis has no index signature TS Error
Lecture 18 Test Suite Setup 00:02:36 Duration
Lecture 19 Type 'Documentany, any' is not assignable Error
Lecture 20 Asserting Tickets Exist 00:06:08 Duration
Lecture 21 Asserting Reserved Tickets 00:05:05 Duration
Lecture 22 Testing the Success Case 00:04:09 Duration
Lecture 23 Fetching a User's Orders 00:05:23 Duration
Lecture 24 A Slightly Complicated Test 00:12:23 Duration
Lecture 25 Fetching Individual Orders 00:04:36 Duration
Lecture 26 Does Fetching Work 00:07:17 Duration
Lecture 27 Cancelling an Order 00:04:32 Duration
Lecture 28 Can We Cancel 00:09:12 Duration

Section 18 : Understanding Event Flow

Lecture 1 Orders Service Events 00:04:42 Duration
Lecture 2 Creating the Events 00:09:23 Duration
Lecture 3 Implementing the Publishers 00:03:13 Duration
Lecture 4 Publishing the Order Creation 00:05:03 Duration
Lecture 5 Publishing Order Cancellation 00:02:33 Duration
Lecture 6 Testing Event Publishing 00:05:32 Duration

Section 19 : Listening for Events and Handling Concurrency Issues

Lecture 1 Time for Listeners! 00:02:12 Duration
Lecture 2 Reminder on Listeners 00:01:53 Duration
Lecture 3 Blueprint for Listeners 00:03:39 Duration
Lecture 4 A Few More Reminders 00:05:26 Duration
Lecture 5 Simple onMessage Implementation 00:02:17 Duration
Lecture 6 ID Adjustment 00:05:44 Duration
Lecture 7 Ticket Updated Listener Implementation 00:04:32 Duration
Lecture 8 Initializing the Listeners 00:02:44 Duration
Lecture 9 A Quick Manual Test 00:03:16 Duration
Lecture 10 Clear Concurrency Issues 00:12:59 Duration
Lecture 11 Reminder on Versioning Records 00:06:41 Duration
Lecture 12 Optimistic Concurrency Control 00:05:37 Duration
Lecture 13 Mongoose Update-If-Current 00:03:46 Duration
Lecture 14 Implementing OCC with Mongoose 00:04:02 Duration
Lecture 15 Test functions cannot both take a 'done' callback and return something Error
Lecture 16 Testing OCC 00:09:07 Duration
Lecture 17 One More Test 00:03:45 Duration
Lecture 18 Who Updates Versions 00:06:29 Duration
Lecture 19 Including Versions in Events 00:02:59 Duration
Lecture 20 Updating Tickets Event Definitions 00:03:55 Duration
Lecture 21 Property 'version' is missing TS Errors After Running Skaffold
Lecture 22 Applying a Version Query 00:07:14 Duration
Lecture 23 Did it Work 00:04:31 Duration
Lecture 24 Abstracted Query Method 00:05:42 Duration
Lecture 25 [Optional] Versioning Without Update-If-Current 00:18:34 Duration
Lecture 26 Testing Listeners 00:04:55 Duration
Lecture 27 A Complete Listener Test 00:09:25 Duration
Lecture 28 Testing the Ack Call 00:02:09 Duration
Lecture 29 Testing the Ticket Updated Listener 00:08:20 Duration
Lecture 30 Success Case Testing 00:04:49 Duration
Lecture 31 Out-Of-Order Events 00:04:51 Duration
Lecture 32 The Next Few Videos 00:03:39 Duration
Lecture 33 Fixing a Few Tests 00:06:36 Duration
Lecture 34 Listeners in the Tickets Service 00:01:47 Duration
Lecture 35 Building the Listener 00:04:59 Duration
Lecture 36 Strategies for Locking a Ticket 00:05:28 Duration
Lecture 37 Reserving a Ticket 00:03:41 Duration
Lecture 38 Setup for Testing Reservation 00:06:59 Duration
Lecture 39 Test Implementation 00:04:29 Duration
Lecture 40 Missing Update Event 00:06:14 Duration
Lecture 41 Private vs Protected Properties 00:06:54 Duration
Lecture 42 Publishing While Listening 00:06:42 Duration
Lecture 43 Mock Function Arguments 00:09:49 Duration
Lecture 44 Order Cancelled Listener 00:06:51 Duration
Lecture 45 A Lightning-Quick Test 00:07:28 Duration
Lecture 46 Don't Forget to Listen! 00:02:21 Duration
Lecture 47 Rejecting Edits of Reserved Tickets 00:06:15 Duration

Section 20 : Worker Services

Lecture 1 The Expiration Service 00:02:38 Duration
Lecture 2 Expiration Options 00:07:55 Duration
Lecture 3 Initial Setup 00:06:14 Duration
Lecture 4 Skaffold errors - Expiration Image Can't be Pulled
Lecture 5 A Touch of Kubernetes Setup 00:07:43 Duration
Lecture 6 File Sync Setup 00:02:32 Duration
Lecture 7 Listener Creation 00:03:42 Duration
Lecture 8 What's Bull All About 00:03:56 Duration
Lecture 9 Creating a Queue 00:09:07 Duration
Lecture 10 Queueing a Job on Event Arrival 00:05:09 Duration
Lecture 11 Testing Job Processing 00:03:17 Duration
Lecture 12 Delaying Job Processing 00:05:23 Duration
Lecture 13 Defining the Expiration Complete Event 00:03:50 Duration
Lecture 14 Publishing an Event on Job Processing 00:06:27 Duration
Lecture 15 Handling an Expiration Event 00:06:00 Duration
Lecture 16 Emitting the Order Cancelled Event 00:05:37 Duration
Lecture 17 Testing the Expiration Complete Listener 00:05:51 Duration
Lecture 18 A Touch More Testing 00:07:20 Duration
Lecture 19 Listening for Expiration 00:02:20 Duration

Section 21 : Handling Payments

Lecture 1 The Payments Service 00:02:11 Duration
Lecture 2 globalThis has no index signature TS Error
Lecture 3 Initial Setup 00:08:45 Duration
Lecture 4 Replicated Fields 00:05:57 Duration
Lecture 5 Another Order Model! 00:07:29 Duration
Lecture 6 Update-If-Current 00:01:17 Duration
Lecture 7 Replicating Orders 00:04:07 Duration
Lecture 8 Testing Order Creation 00:06:12 Duration
Lecture 9 Marking an Order as Cancelled 00:05:39 Duration
Lecture 10 Cancelled Testing 00:06:42 Duration
Lecture 11 Starting the Listeners 00:03:54 Duration
Lecture 12 Payments Flow with Stripe 00:05:10 Duration
Lecture 13 Implementing the Create Charge Handler 00:08:32 Duration
Lecture 14 Validating Order Payment 00:04:03 Duration
Lecture 15 Testing Order Validation Before Payment 00:06:59 Duration
Lecture 16 Testing Same-User Validation 00:05:10 Duration
Lecture 17 Stripe Setup 00:03:58 Duration
Lecture 18 Creating a Stripe Secret 00:03:19 Duration
Lecture 19 Creating a Charge with Stripe 00:06:08 Duration
Lecture 20 Manual Testing of Payments 00:06:35 Duration
Lecture 21 Automated Payment Testing 00:06:26 Duration
Lecture 22 Mocked Stripe Client 00:04:23 Duration
Lecture 23 A More Realistic Test Setup 00:09:16 Duration
Lecture 24 Realistic Test Implementation 00:06:15 Duration
Lecture 25 Tying an Order and Charge Together 00:07:18 Duration
Lecture 26 Testing Payment Creation 00:06:13 Duration
Lecture 27 Publishing a Payment Created Event 00:06:31 Duration
Lecture 28 More on Publishing 00:03:18 Duration
Lecture 29 Marking an Order as Complete 00:06:17 Duration
Lecture 30 Important Info About the Next Lecture - Don't Skip
Lecture 31 Don't Cancel Completed Orders! 00:01:01 Duration

Section 22 : Back to the Client

Lecture 1 A Few More Pages 00:06:15 Duration
Lecture 2 Reminder on Data Fetching with Next 00:06:09 Duration
Lecture 3 Two Quick Fixes 00:05:43 Duration
Lecture 4 Scaffolding a Form 00:03:43 Duration
Lecture 5 Sanitizing Price Input 00:06:29 Duration
Lecture 6 Ticket Creation 00:06:44 Duration
Lecture 7 Listing All Tickets 00:07:41 Duration
Lecture 8 Linking to Wildcard Routes 00:07:07 Duration
Lecture 9 Creating an Order 00:07:25 Duration
Lecture 10 Programmatic Navigation to Wildcard Routes 00:04:16 Duration
Lecture 11 The Expiration Timer 00:10:54 Duration
Lecture 12 Displaying the Expiration 00:01:01 Duration
Lecture 13 Showing a Stripe Payment Form 00:03:06 Duration
Lecture 14 Configuring Stripe 00:04:23 Duration
Lecture 15 Test Credit Card Numbers 00:01:58 Duration
Lecture 16 Paying for an Order 00:09:24 Duration
Lecture 17 Filtering Reserved Tickets 00:02:27 Duration
Lecture 18 Header Links 00:01:47 Duration
Lecture 19 Rendering a List of Orders 00:06:20 Duration

Section 23 : CICD

Lecture 1 Development Workflow 00:03:39 Duration
Lecture 2 Git Repository Approaches 00:06:04 Duration
Lecture 3 Creating a GitHub Action 00:07:11 Duration
Lecture 4 Adding a CI Test Script 00:02:42 Duration
Lecture 5 Running Tests on PR Creation 00:04:48 Duration
Lecture 6 Output of Failing Tests 00:05:48 Duration
Lecture 7 Running Tests in Parallel 00:07:27 Duration
Lecture 8 Verifying a Test Run 00:03:01 Duration
Lecture 9 Selective Test Execution 00:05:44 Duration
Lecture 10 Deployment Options 00:07:40 Duration
Lecture 11 Creating a Hosted Cluster 00:02:38 Duration
Lecture 12 Reminder on Kubernetes Context 00:03:32 Duration
Lecture 13 Reminder on Swapping Contexts 00:03:56 Duration
Lecture 14 The Deployment Plan 00:04:04 Duration
Lecture 15 Building an Image in an Action 00:08:40 Duration
Lecture 16 Testing the Image Build 00:02:30 Duration
Lecture 17 Restarting the Deployment 00:07:17 Duration
Lecture 18 Applying Kubernetes Manifests
Lecture 19 Prod vs Dev Manifest Files 00:04:23 Duration
Lecture 20 Manual Secret Creation 00:03:39 Duration
Lecture 21 Don't Forget Ingress-Nginx! 00:05:31 Duration
Lecture 22 Testing Automated Deployment 00:02:51 Duration
Lecture 23 Additional Deploy Files 00:07:12 Duration
Lecture 24 A Successful Deploy! 00:06:06 Duration
Lecture 25 Buying a Domain Name 00:03:10 Duration
Lecture 26 Three Important Changes Needed to Deploy - Do Not Skip!
Lecture 27 Configuring the Domain Name 00:05:27 Duration
Lecture 28 I Really Hope This Works 00:01:58 Duration
Lecture 29 Next Steps 00:04:36 Duration

Section 24 : [Appendix A] - Basics of Docker

Lecture 1 Why Use Docker 00:03:43 Duration
Lecture 2 What is Docker 00:02:53 Duration
Lecture 3 Docker for Mac Windows 00:01:57 Duration
Lecture 4 Installing Docker on macOS 00:04:45 Duration
Lecture 5 Installing Docker for Windows Home users
Lecture 6 Installing Docker for Windows Professional 00:02:03 Duration
Lecture 7 More Windows Professional Setup 00:00:40 Duration
Lecture 8 One Last Piece of Windows Professional Setup 00:01:09 Duration
Lecture 9 Installing Docker on Linux
Lecture 10 Using the Docker Client 00:05:03 Duration
Lecture 11 But Really 00:08:30 Duration
Lecture 12 How's Docker Running on Your Computer 00:02:44 Duration
Lecture 13 Docker Run in Detail 00:01:53 Duration
Lecture 14 Overriding Default Commands 00:05:12 Duration
Lecture 15 Listing Running Containers 00:04:09 Duration
Lecture 16 Container Lifecycle 00:05:16 Duration
Lecture 17 Restarting Stopped Containers 00:03:43 Duration
Lecture 18 Removing Stopped Containers 00:01:39 Duration
Lecture 19 Retrieving Output Logs 00:02:33 Duration
Lecture 20 Stopping Containers 00:05:21 Duration
Lecture 21 Multi-Command Containers 00:04:15 Duration
Lecture 22 Executing Commands in Running Containers 00:02:53 Duration
Lecture 23 The Purpose of the 'it' Flag 00:04:35 Duration
Lecture 24 Getting a Command Prompt in a Container 00:04:06 Duration
Lecture 25 Starting with a Shell 00:02:13 Duration
Lecture 26 Container Isolation 00:03:09 Duration
Lecture 27 Creating Docker Images 00:02:36 Duration
Lecture 28 Buildkit for Docker Desktop v2
Lecture 29 Building a Dockerfile 00:04:51 Duration
Lecture 30 Dockerfile Teardown 00:02:40 Duration
Lecture 31 What's a Base Image 00:05:40 Duration
Lecture 32 The Build Process in Detail 00:11:09 Duration
Lecture 33 A Brief Recap
Lecture 34 Rebuilds with Cache 00:07:02 Duration
Lecture 35 Tagging an Image 00:04:26 Duration
Lecture 36 Quick Note for Windows Users
Lecture 37 Manual Image Generation with Docker Commit 00:05:00 Duration
Lecture 38 Project Outline 00:02:35 Duration
Lecture 39 Node Server Setup 00:05:03 Duration
Lecture 40 A Few Planned Errors 00:05:12 Duration
Lecture 41 Required WORKDIR update - Could not detect node name, idealTree errors
Lecture 42 Base Image Issues 00:07:50 Duration
Lecture 43 A Few Missing Files 00:03:18 Duration
Lecture 44 Copying Build Files 00:04:50 Duration
Lecture 45 Container Port Forwarding 00:07:26 Duration
Lecture 46 Specifying a Working Directory 00:07:52 Duration
Lecture 47 Unnecessary Rebuilds 00:04:16 Duration
Lecture 48 Minimizing Cache Busting and Rebuilds 00:04:58 Duration

Section 25 : [Appendix B] - Basics of Typescript

Lecture 1 About Proctor Testing
Lecture 2 TypeScript Overview 00:06:19 Duration
Lecture 3 Environment Setup 00:07:59 Duration
Lecture 4 A First App 00:04:42 Duration
Lecture 5 Executing Typescript Code 00:05:03 Duration
Lecture 6 One Quick Change 00:03:34 Duration
Lecture 7 Catching Errors with TypeScript 00:07:22 Duration
Lecture 8 Catching More Errors! 00:05:15 Duration
Lecture 9 Do Not Skip - Course Overview 00:03:35 Duration
Lecture 10 Types 00:05:11 Duration
Lecture 11 More on Types 00:05:52 Duration
Lecture 12 Examples of Types 00:04:48 Duration
Lecture 13 Where Do We Use Types 00:00:49 Duration
Lecture 14 Type Annotations and Inference 00:02:02 Duration
Lecture 15 Annotations With Variables 00:04:53 Duration
Lecture 16 Object Literal Annotations 00:06:53 Duration
Lecture 17 Understanding Inference 00:03:50 Duration
Lecture 18 The Any Type 00:07:47 Duration
Lecture 19 Fixing the Any Type 00:01:48 Duration
Lecture 20 Delayed Initialization 00:03:04 Duration
Lecture 21 When Inference Doesn't Work 00:04:36 Duration
Lecture 22 More on Annotations Around Functions 00:04:55 Duration
Lecture 23 Inference Around Functions 00:06:07 Duration
Lecture 24 Annotations for Anonymous Functions 00:01:42 Duration
Lecture 25 Void and Never 00:02:48 Duration
Lecture 26 Destructuring with Annotations 00:03:35 Duration
Lecture 27 Annotations Around Objects 00:07:05 Duration
Lecture 28 Arrays in TypeScript 00:05:04 Duration
Lecture 29 Why Typed Arrays 00:04:30 Duration
Lecture 30 Multiple Typees in Arrays 00:02:56 Duration
Lecture 31 When to Use Typed Arrays 00:00:53 Duration
Lecture 32 Tuples in TypeScript 00:04:04 Duration
Lecture 33 Tuples in Action 00:05:27 Duration
Lecture 34 Why Tuples 00:03:19 Duration
Lecture 35 Interfaces 00:01:26 Duration
Lecture 36 Long Type Annotations 00:04:41 Duration
Lecture 37 Fixing Annotations With Interfaces 00:04:36 Duration
Lecture 38 Syntax Around Interfaces 00:03:30 Duration
Lecture 39 Functions in Interfaces 00:04:45 Duration
Lecture 40 Code Reuse with Interfaces 00:04:15 Duration
Lecture 41 General Plan with Interfaces 00:03:11 Duration
Lecture 42 Classes 00:03:46 Duration
Lecture 43 Basic Inheritance 00:03:02 Duration
Lecture 44 Class Method Modifiers 00:06:40 Duration
Lecture 45 Fields in Classes 00:06:18 Duration
Lecture 46 Fields with Inheritance 00:04:18 Duration
Lecture 47 Where to Use Classes 00:01:09 Duration
Lecture 48 App Overview 00:02:44 Duration
Lecture 49 Bundling with Parcel 00:04:54 Duration
Lecture 50 Project Structure 00:03:19 Duration
Lecture 51 Generating Random Data 00:05:28 Duration
Lecture 52 Type Definition Files 00:05:16 Duration
Lecture 53 Using Type Definition Files 00:06:20 Duration
Lecture 54 Export Statements in TypeScript 00:05:05 Duration
Lecture 55 Defining a Company 00:04:42 Duration
Lecture 56 Important Note About Google Maps Key
Lecture 57 Adding Google Maps Support 00:07:38 Duration
Lecture 58 Required Update for New @types Library
Lecture 59 Google Maps Integration with TypeScript 00:04:05 Duration
Lecture 60 Exploring Type Definition Files 00:12:46 Duration
Lecture 61 Hiding Functionality 00:06:28 Duration
Lecture 62 Why Use Private Modifiers Here's Why 00:08:25 Duration
Lecture 63 Adding Markers 00:09:18 Duration
Lecture 64 Duplicate Code 00:02:44 Duration
Lecture 65 One Possible Solution 00:06:37 Duration
Lecture 66 Restricting Access with Interfaces 00:05:35 Duration
Lecture 67 Implicit Type Checks 00:03:25 Duration
Lecture 68 Showing Popup Windows 00:06:47 Duration
Lecture 69 Updating Interface Definitions 00:07:11 Duration
Lecture 70 Optional Implements Clauses 00:06:06 Duration
Lecture 71 App Wrapup 00:08:07 Duration