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 in to 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