Module 1: Getting Started with Kotlin Programming Language
	- Introduction to Kotlin
 
	- How Kotlin Works with the JVM?
 
Module 2: Kotlin Fundamentals
	- In this section, we will explore the fundamentals of Kotlin.
 
	- val & var variables in Kotlin
 
	- Basic Types - Int, Long, Double, String
 
	- Conditionals - IF and WHEN block
 
	- Ranges, Loops
 
	- while & do-While
 
	- break, labels and return
 
Module 3: Functions in Kotlin
	- Defining and Invoking Functions
 
	- Default Value Parameters & Named Arguments
 
	- Top-Level Functions and Top-level Properties
 
Module 4: Classes, Interfaces and Inheritance
	- Introduction to class - Creating a class and objects
 
	- Primary Constructors
 
	- Secondary Constructors
 
	- initializer code using init block
 
	- Data Classes
 
	- Custom Getters and Setters
 
	- Inheritance - Extending Classes
 
	- Inheritance - Override Functions, Variables
 
	- object keyword for creating instance of the class
 
	- companion object Keyword
 
	- Interfaces
 
	- Interfaces - Handling Conflicting Functions
 
	- Interfaces - Defining and Overriding Variables
 
	- Visibility Modifiers
 
	- Type Checking, Casting and Smart Cast
 
	- Enum class
 
Module 5: Nulls in Kotlin
	- Nullable & Non-Nullable types in Kotlin
 
	- Safe Call(?), Elvis Operator(?:) & Non Null Assertion(!!) to deal with Null Values
 
	- Invoking or assigning a Nullable Type to a Non-Nullable Type
 
Module 6: Collections, Arrays & Lamda Expressions
	- Introduction to Collections
 
	- Introduction to Lamda Expressions
 
	- Lambdas and Higher Order Functions
 
	- Filter Operations on Kotlin Collections
 
	- Map Operations on Kotlin Collections
 
	- FlatMap Operations in Collections
 
	- Working With HashMaps
 
	- Lazy Evaluation of Collections using Sequences
 
	- Nullability in Collections
 
Module 7: Exceptions In Kotlin
	- Handling Exceptions using try-catch
 
Module 8: Scope Functions
	- Introduction to Scope Functions
 
	- Apply & also Scope Function
 
	- Let Scope Function
 
	- with & run Scope Function
 
Module 9: Getting Started with Kotlin and Spring Boot
	- Overview of the app & Project Setup
 
	- Build a Simple Endpoint - Greeting Controller
 
	- Constructor Injection in Spring
 
	- Setting up different profiles in Spring Boot
 
	- Set up Logging in Kotlin
 
Module 10: Integration/Unit Testing using Junit 5
	- Introduction to Automated Tests & Setting up JUnit5
 
	- Integration Test for Controller
 
	- Unit Test for Controller - Using the Mockk Mocking library
 
Module 11: Introduction to RESTful Web Services
	- Introduction to RESTful Web Services
 
	- Beginners Guide to REST
 
	- Richardson Maturity Model
 
	- Introduction to Postman
 
	- Assignment - Create Data Model
 
	- Assignment Review - Create Data Model
 
	- Introduction to Spring RestTemplate
 
	- Using WebFlux to Display API Data
 
	- URI Components Builder
 
	- Rest Template Examples
 
	- Going Reactive with Spring WebClient
 
Module 12: RESTful WebServices with Spring MVC
	- Introduction to RESTful Web Services with Spring MVC
 
	- New Spring Boot Project
 
	- Spring Boot Command Line Runner
 
	- Introduction to MapStruct
 
	- Using MapStruct
 
	- MapStruct IntelliJ Plugin
 
	- Category Service
 
	- List Categories
 
	- Testing with Postman
 
	- Assignment - Create Get API for Customers
 
	- Assignment Review
 
	- Create New Customer with Post
 
	- Update Customer with PUT
 
Module 13: Unit Testing Controller layer (Web Tier)
	- Setting up the Unit Test for the CourseController
 
	- Unit test for the Post Endpoint in CourseController
 
	- Unit test for the GET Endpoint in CourseController
 
	- Unit test for the PUT Endpoint in CourseController
 
	- Unit test for the DELETE Endpoint in CourseController
 
Module 14: Bean Validation using Validators and ControllerAdvice
	- Name and Category as Mandatory using @NotBlank Annotation
 
	- Implement Custom Error Handling using ControllerAdvice pattern
 
	- Handle Global RuntimeException using ControllerAdvice Pattern
 
Module 15: Custom JPA queries using Spring Data JPA and DB Layer testing using @DataJpaTest
	- Retrieve Courses by Name using JPA Query Creation Function
 
	- Retrieve Courses by Name using Native SQL query
 
	- Testing Mutliple sets of Data using @Parameterized test
 
Module 16: GET Endpoint to retrieve Courses By Name using @RequestParam
	- Use existing GET endpoint to retrieve Courses by Name
 
	- Write Integration test to retrieve course by Name
 
Module 17: Entity RelationShips using Spring Data JPA
	- Adding Instructor Entity into the Course Catalog Service
 
	- Adding the relationship in the Entity Class
 
	- Instructor Controller to Manage Instructor Data
 
	- Update CourseService to validate Instructor Data
 
	- Fix the CourseController Integration Tests
 
	- Fix the CourseController Unit Tests
 
Module 18: Integrating with Postgres DB
	- Setting up the Postgres DB and App to interact with Postgres
 
	- Test the app with Postgres DB
 
Module 19: Integration Testing using TestContainers
	- Setting Up TestContainers for the Integration Test
 
	- Configure @DataJpaTest with TestContainers
 
Module 20: Java & Kotlin Interoperability
	- Invoking Kotlin Code from Java Class
 
	- Invoking Java Code from Kotlin
 
	- Useful JVM annotations in Kotlin