Section 1 : Fundamental Ideas Around Microservices

Lecture 1 What Is a Microservice 00:03:19 Duration
Lecture 2 Data in Microservices 00:07:34 Duration
Lecture 3 Big Problems with Data 00:05:08 Duration
Lecture 4 Sync Communication Between Services 00:06:53 Duration
Lecture 5 Event-Based Communication 00:05:19 Duration
Lecture 6 A Crazy Way of Storing Data 00:09:48 Duration
Lecture 7 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 React Project Setup 00:05:00 Duration
Lecture 8 Building Post Submission 00:09:54 Duration
Lecture 9 Handling CORS Errors 00:04:08 Duration
Lecture 10 Fetching and Rendering Posts 00:10:04 Duration
Lecture 11 Creating Comments 00:08:09 Duration
Lecture 12 Displaying Comments 00:07:23 Duration
Lecture 13 Request Minimization Strategies 00:04:54 Duration
Lecture 14 An Async Solution 00:07:16 Duration
Lecture 15 Common Questions Around Async Events 00:04:14 Duration
Lecture 16 Event Bus Overview 00:05:14 Duration
Lecture 17 A Basic Event Bus Implementation 00:05:22 Duration
Lecture 18 Emitting Events 00:05:18 Duration
Lecture 19 Emitting Comment Creation Events 00:03:45 Duration
Lecture 20 Receiving Events 00:04:32 Duration
Lecture 21 Creating the Data Query Service 00:04:42 Duration
Lecture 22 Parsing Incoming Events 00:07:02 Duration
Lecture 23 Using the Query Service 00:07:09 Duration
Lecture 24 Adding a Simple Feature 00:04:46 Duration
Lecture 25 Issues with Comment Filtering 00:07:43 Duration
Lecture 26 A Second Approach 00:05:37 Duration
Lecture 27 How to Handle Resource Updates 00:04:45 Duration
Lecture 28 Creating the Moderation Service 00:04:52 Duration
Lecture 29 Adding Comment Moderation 00:04:26 Duration
Lecture 30 Handling Moderation 00:05:29 Duration
Lecture 31 Updating Comment Content 00:04:58 Duration
Lecture 32 A Quick Test 00:05:57 Duration
Lecture 33 Rendering Comments by Status 00:03:26 Duration
Lecture 34 Dealing with Missing Events 00:10:23 Duration
Lecture 35 Implementing Event Sync 00:06:11 Duration
Lecture 36 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 Dockerizing the Posts Service 00:04:02 Duration
Lecture 6 Review Some Basic Commands 00:05:23 Duration
Lecture 7 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 A Kubernetes Tour 00:09:45 Duration
Lecture 3 Important Kubernetes Terminology 00:02:51 Duration
Lecture 4 Notes on Config Files 00:03:11 Duration
Lecture 5 Creating a Pod 00:06:41 Duration
Lecture 6 Understanding a Pod Spec 00:05:15 Duration
Lecture 7 Common Kubectl Commands 00:04:44 Duration
Lecture 8 A Time-Saving Alias 00:02:26 Duration
Lecture 9 Introducing Deployments 00:03:27 Duration
Lecture 10 Creating a Deployment 00:06:11 Duration
Lecture 11 Common Commands Around Deployments 00:04:35 Duration
Lecture 12 Updating Deployments 00:06:02 Duration
Lecture 13 Preferred Method for Updating Deployments 00:05:42 Duration
Lecture 14 Networking With Services 00:04:15 Duration
Lecture 15 Creating a NodePort Service 00:07:52 Duration
Lecture 16 Accessing NodePort Services 00:05:09 Duration
Lecture 17 Setting Up Cluster IP Services 00:03:12 Duration
Lecture 18 Building a Deployment for the Event Bus 00:05:35 Duration
Lecture 19 Adding ClusterIP Services 00:07:37 Duration
Lecture 20 How to Communicate Between Services 00:04:09 Duration
Lecture 21 Updating Service Addresses 00:06:27 Duration
Lecture 22 Verifying Communication 00:05:00 Duration
Lecture 23 Adding Query, Moderation and Comments 00:09:57 Duration
Lecture 24 Testing Communication 00:05:29 Duration
Lecture 25 Load Balancer Services 00:05:13 Duration
Lecture 26 Load Balancers and Ingress 00:06:38 Duration
Lecture 27 Installing Ingress-Nginx 00:07:40 Duration
Lecture 28 Writing Ingress Config Files 00:04:47 Duration
Lecture 29 Hosts File Tweak 00:06:15 Duration
Lecture 30 Deploying the React App 00:06:09 Duration
Lecture 31 Unique Route Paths 00:06:55 Duration
Lecture 32 Final Route Config 00:06:32 Duration
Lecture 33 Introducing Skaffold 00:03:08 Duration
Lecture 34 Skaffold Setup 00:09:17 Duration
Lecture 35 First Time Skaffold Startup 00:01:00 Duration
Lecture 36 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 Events and Architecture Design 00:03:48 Duration
Lecture 6 Auth Service Setup 00:04:50 Duration
Lecture 7 Auth K8s Setup
Lecture 8 Adding Skaffold 00:05:36 Duration
Lecture 9 Ingress-Nginx Setup 00:07:19 Duration
Lecture 10 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 Google Cloud Initial Setup 00:02:43 Duration
Lecture 4 Kubernetes Cluster Creation 00:03:59 Duration
Lecture 5 Kubectl Contexts 00:03:49 Duration
Lecture 6 Initializing the GCloud SDK 00:05:03 Duration
Lecture 7 Installing the GCloud Context 00:04:17 Duration
Lecture 8 Updating the Skaffold Config 00:04:34 Duration
Lecture 9 More Skaffold Updates 00:01:06 Duration
Lecture 10 Creating a Load Balancer 00:05:12 Duration
Lecture 11 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 Surprising Complexity Around Errors 00:06:06 Duration
Lecture 6 Other Sources of Errors 00:04:17 Duration
Lecture 7 Solution for Error Handling 00:04:50 Duration
Lecture 8 Building an Error Handling Middleware 00:07:38 Duration
Lecture 9 Communicating More Info to the Error Handler 00:05:23 Duration
Lecture 10 Encoding More Information In an Error 00:04:35 Duration
Lecture 11 Subclassing for Custom Errors 00:08:17 Duration
Lecture 12 Determining Error Type 00:03:10 Duration
Lecture 13 Converting Errors to Responses 00:10:12 Duration
Lecture 14 Moving Logic Into Errors 00:08:36 Duration
Lecture 15 Verifying Our Custom Errors
Lecture 16 Final Error Related Code 00:10:19 Duration
Lecture 17 How to Define New Custom Errors 00:05:01 Duration
Lecture 18 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 Reminder on Password Hashing 00:04:58 Duration
Lecture 13 Adding Password Hashing 00:06:57 Duration
Lecture 14 Comparing Hashed Password 00:02:54 Duration
Lecture 15 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 Auth Helper Function 00:07:12 Duration
Lecture 17 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 Basics of Next JS 00:05:24 Duration
Lecture 4 Building a Next Image 00:04:28 Duration
Lecture 5 Running Next in Kubernetes 00:10:12 Duration
Lecture 6 Note on File Change Detection 00:04:26 Duration
Lecture 7 Adding Global CSS 00:05:09 Duration
Lecture 8 Adding a Sign Up Form 00:03:11 Duration
Lecture 9 Handling Email and Password Inputs 00:03:42 Duration
Lecture 10 Successful Account Signup 00:05:12 Duration
Lecture 11 Handling Validation Errors 00:06:53 Duration
Lecture 12 The useRequest Hook 00:06:59 Duration
Lecture 13 Using the useRequest Hook 00:03:40 Duration
Lecture 14 An onSuccess Callback 00:05:37 Duration
Lecture 15 Overview on Server Side Rendering 00:06:47 Duration
Lecture 16 Fetching Data During SSR 00:05:07 Duration
Lecture 17 Why the Error 00:09:00 Duration
Lecture 18 Two Possible Solutions 00:07:04 Duration
Lecture 19 Cross Namespace Service Communication 00:07:45 Duration
Lecture 20 When is GetInitialProps Called 00:06:46 Duration
Lecture 21 On the Server or the Browser 00:02:01 Duration
Lecture 22 Specifying the Host 00:08:23 Duration
Lecture 23 Passing Through the Cookies 00:04:00 Duration
Lecture 24 A Reusable API Client 00:07:05 Duration
Lecture 25 Content on the Landing Page 00:02:01 Duration
Lecture 26 The Sign In Form 00:03:11 Duration
Lecture 27 A Reusable Header 00:05:00 Duration
Lecture 28 Moving GetInitialProps 00:02:11 Duration
Lecture 29 Issues with Custom App GetInitialProps 00:06:41 Duration
Lecture 30 Handling Multiple GetInitialProps 00:06:07 Duration
Lecture 31 Passing Props Through 00:03:03 Duration
Lecture 32 Building the Header 00:05:05 Duration
Lecture 33 Conditionally Showing Links 00:05:58 Duration
Lecture 34 Signing Out 00:04:36 Duration

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 An Easy Publish Command 00:07:26 Duration
Lecture 7 Relocating Shared Code 00:07:29 Duration
Lecture 8 Updating Import Statements 00:05:16 Duration
Lecture 9 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 Building a Session 00:05:39 Duration
Lecture 11 Testing Request Validation 00:04:12 Duration
Lecture 12 Validating Title and Price 00:04:09 Duration
Lecture 13 Reminder on Mongoose with TypeScript 00:07:11 Duration
Lecture 14 Defining the Ticket Model 00:03:48 Duration
Lecture 15 Creation via Route Handler 00:08:21 Duration
Lecture 16 Testing Show Routes 00:06:52 Duration
Lecture 17 Unexpected Failure! 00:05:29 Duration
Lecture 18 What's that Error! 00:08:57 Duration
Lecture 19 Better Error Logging 00:05:11 Duration
Lecture 20 Complete Index Route Implementation 00:06:31 Duration
Lecture 21 Ticket Updating 00:06:14 Duration
Lecture 22 Handling Updates 00:04:15 Duration
Lecture 23 Permission Checking 00:06:49 Duration
Lecture 24 Final Update Changes 00:09:04 Duration
Lecture 25 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 Listening For Data 00:06:55 Duration
Lecture 9 Accessing Event Data 00:06:56 Duration
Lecture 10 Client ID Generation 00:04:48 Duration
Lecture 11 Queue Groups 00:07:28 Duration
Lecture 12 Manual Ack Mode 00:09:51 Duration
Lecture 13 Client Health Checks 00:09:45 Duration
Lecture 14 Graceful Client Shutdown
Lecture 15 Core Concurrency Issues 00:12:55 Duration
Lecture 16 Common Questions 00:08:08 Duration
Lecture 17 [Optional] More Possible Concurrency Solutions 00:16:42 Duration
Lecture 18 Solving Concurrency Issues 00:20:05 Duration
Lecture 19 Concurrency Control with the Tickets App 00:09:40 Duration
Lecture 20 Event Redelivery 00:04:34 Duration
Lecture 21 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 Enforcing Data Types 00:03:53 Duration
Lecture 10 Where Does this Get Used 00:02:49 Duration
Lecture 11 Custom Publisher 00:08:11 Duration
Lecture 12 Using the Custom Publisher 00:03:49 Duration
Lecture 13 Awaiting Event Publication 00:04:27 Duration
Lecture 14 Common Event Definitions Summary 00:06:26 Duration
Lecture 15 Updating the Common Module 00:07:35 Duration
Lecture 16 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 Singleton Implementation 00:09:04 Duration
Lecture 6 Accessing the NATS Client 00:04:28 Duration
Lecture 7 Graceful Shutdown 00:06:55 Duration
Lecture 8 Successful Listen! 00:03:23 Duration
Lecture 9 Ticket Update Publishing 00:04:28 Duration
Lecture 10 Failed Event Publishing 00:07:03 Duration
Lecture 11 Handling Publish Failures 00:06:02 Duration
Lecture 12 Fixing a Few Tests 00:03:52 Duration
Lecture 13 Redirecting Imports 00:05:35 Duration
Lecture 14 Providing a Mock Implementation 00:09:09 Duration
Lecture 15 Test-Suite Wide Mocks 00:02:12 Duration
Lecture 16 Ensuring Mock Invocations 00:09:13 Duration
Lecture 17 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 Test Suite Setup 00:02:36 Duration
Lecture 18 Asserting Tickets Exist 00:06:08 Duration
Lecture 19 Asserting Reserved Tickets 00:05:05 Duration
Lecture 20 Testing the Success Case 00:04:09 Duration
Lecture 21 Fetching a User's Orders 00:05:23 Duration
Lecture 22 A Slightly Complicated Test 00:12:23 Duration
Lecture 23 Fetching Individual Orders 00:04:36 Duration
Lecture 24 Does Fetching Work 00:07:17 Duration
Lecture 25 Cancelling an Order 00:04:32 Duration
Lecture 26 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 Testing OCC 00:09:07 Duration
Lecture 16 One More Test 00:03:45 Duration
Lecture 17 Who Updates Versions 00:06:29 Duration
Lecture 18 Including Versions in Events 00:02:59 Duration
Lecture 19 Updating Tickets Event Definitions 00:03:55 Duration
Lecture 20 Applying a Version Query 00:07:14 Duration
Lecture 21 Did it Work 00:04:31 Duration
Lecture 22 Abstracted Query Method 00:05:42 Duration
Lecture 23 [Optional] Versioning Without Update-If-Current 00:18:34 Duration
Lecture 24 Testing Listeners 00:04:55 Duration
Lecture 25 A Complete Listener Test 00:09:25 Duration
Lecture 26 Testing the Ack Call 00:02:09 Duration
Lecture 27 Testing the Ticket Updated Listener 00:08:20 Duration
Lecture 28 Success Case Testing 00:04:49 Duration
Lecture 29 Out-Of-Order Events 00:04:51 Duration
Lecture 30 The Next Few Videos 00:03:39 Duration
Lecture 31 Fixing a Few Tests 00:06:36 Duration
Lecture 32 Listeners in the Tickets Service 00:01:47 Duration
Lecture 33 Building the Listener 00:04:59 Duration
Lecture 34 Strategies for Locking a Ticket 00:05:28 Duration
Lecture 35 Reserving a Ticket 00:03:41 Duration
Lecture 36 Setup for Testing Reservation 00:06:59 Duration
Lecture 37 Test Implementation 00:04:29 Duration
Lecture 38 Missing Update Event 00:06:14 Duration
Lecture 39 Private vs Protected Properties 00:06:54 Duration
Lecture 40 Publishing While Listening 00:06:42 Duration
Lecture 41 Mock Function Arguments 00:09:49 Duration
Lecture 42 Order Cancelled Listener 00:06:51 Duration
Lecture 43 A Lightning-Quick Test 00:07:28 Duration
Lecture 44 Don't Forget to Listen! 00:02:21 Duration
Lecture 45 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 A Touch of Kubernetes Setup 00:07:43 Duration
Lecture 5 File Sync Setup 00:02:32 Duration
Lecture 6 Listener Creation 00:03:42 Duration
Lecture 7 What's Bull All About 00:03:56 Duration
Lecture 8 Creating a Queue 00:09:07 Duration
Lecture 9 Queueing a Job on Event Arrival 00:05:09 Duration
Lecture 10 Testing Job Processing 00:03:17 Duration
Lecture 11 Delaying Job Processing 00:05:23 Duration
Lecture 12 Defining the Expiration Complete Event 00:03:50 Duration
Lecture 13 Publishing an Event on Job Processing 00:06:27 Duration
Lecture 14 Handling an Expiration Event 00:06:00 Duration
Lecture 15 Emitting the Order Cancelled Event 00:05:37 Duration
Lecture 16 Testing the Expiration Complete Listener 00:05:51 Duration
Lecture 17 A Touch More Testing 00:07:20 Duration
Lecture 18 Listening for Expiration 00:02:20 Duration

Section 21 : Handling Payments

Lecture 1 The Payments Service 00:02:11 Duration
Lecture 2 Initial Setup 00:08:45 Duration
Lecture 3 Replicated Fields 00:05:57 Duration
Lecture 4 Another Order Model! 00:07:29 Duration
Lecture 5 Update-If-Current 00:01:17 Duration
Lecture 6 Replicating Orders 00:04:07 Duration
Lecture 7 Testing Order Creation 00:06:12 Duration
Lecture 8 Marking an Order as Cancelled 00:05:39 Duration
Lecture 9 Cancelled Testing 00:06:42 Duration
Lecture 10 Starting the Listeners 00:03:54 Duration
Lecture 11 Payments Flow with Stripe 00:05:10 Duration
Lecture 12 Implementing the Create Charge Handler 00:08:32 Duration
Lecture 13 Validating Order Payment 00:04:03 Duration
Lecture 14 Testing Order Validation Before Payment 00:06:59 Duration
Lecture 15 Testing Same-User Validation 00:05:10 Duration
Lecture 16 Stripe Setup 00:03:58 Duration
Lecture 17 Creating a Stripe Secret 00:03:19 Duration
Lecture 18 Creating a Charge with Stripe 00:06:08 Duration
Lecture 19 Manual Testing of Payments 00:06:35 Duration
Lecture 20 Automated Payment Testing 00:06:26 Duration
Lecture 21 Mocked Stripe Client 00:04:23 Duration
Lecture 22 A More Realistic Test Setup 00:09:16 Duration
Lecture 23 Realistic Test Implementation 00:06:15 Duration
Lecture 24 Tying an Order and Charge Together 00:07:18 Duration
Lecture 25 Testing Payment Creation 00:06:13 Duration
Lecture 26 Publishing a Payment Created Event 00:06:31 Duration
Lecture 27 More on Publishing 00:03:18 Duration
Lecture 28 Marking an Order as Complete 00:06:17 Duration
Lecture 29 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 Configuring the Domain Name 00:05:27 Duration
Lecture 27 I Really Hope This Works 00:01:58 Duration
Lecture 28 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 Professional 00:02:03 Duration
Lecture 6 More Windows Professional Setup 00:00:40 Duration
Lecture 7 One Last Piece of Windows Professional Setup 00:01:09 Duration
Lecture 8 Using the Docker Client 00:05:03 Duration
Lecture 9 But Really 00:08:30 Duration
Lecture 10 How's Docker Running on Your Computer 00:02:44 Duration
Lecture 11 Docker Run in Detail 00:01:53 Duration
Lecture 12 Overriding Default Commands 00:05:12 Duration
Lecture 13 Listing Running Containers 00:04:09 Duration
Lecture 14 Container Lifecycle 00:05:16 Duration
Lecture 15 Restarting Stopped Containers 00:03:43 Duration
Lecture 16 Removing Stopped Containers 00:01:39 Duration
Lecture 17 Retrieving Output Logs 00:02:33 Duration
Lecture 18 Stopping Containers 00:05:21 Duration
Lecture 19 Multi-Command Containers 00:04:15 Duration
Lecture 20 Executing Commands in Running Containers 00:02:53 Duration
Lecture 21 The Purpose of the 'it' Flag 00:04:35 Duration
Lecture 22 Getting a Command Prompt in a Container 00:04:06 Duration
Lecture 23 Starting with a Shell 00:02:13 Duration
Lecture 24 Container Isolation 00:03:09 Duration
Lecture 25 Creating Docker Images 00:02:36 Duration
Lecture 26 Building a Dockerfile 00:04:51 Duration
Lecture 27 Dockerfile Teardown 00:02:40 Duration
Lecture 28 What's a Base Image 00:05:40 Duration
Lecture 29 The Build Process in Detail 00:11:09 Duration
Lecture 30 A Brief Recap
Lecture 31 Rebuilds with Cache 00:07:02 Duration
Lecture 32 Tagging an Image 00:04:26 Duration
Lecture 33 Manual Image Generation with Docker Commit 00:05:00 Duration
Lecture 34 Project Outline 00:02:35 Duration
Lecture 35 Node Server Setup 00:05:03 Duration
Lecture 36 A Few Planned Errors 00:05:12 Duration
Lecture 37 Base Image Issues 00:07:50 Duration
Lecture 38 A Few Missing Files 00:03:18 Duration
Lecture 39 Copying Build Files 00:04:50 Duration
Lecture 40 Container Port Forwarding 00:07:26 Duration
Lecture 41 Specifying a Working Directory 00:07:52 Duration
Lecture 42 Unnecessary Rebuilds 00:04:16 Duration
Lecture 43 Minimizing Cache Busting and Rebuilds 00:04:58 Duration

Section 25 : [Appendix B] - Basics of Typescript

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