This project serves as a learning ground for me. I am trying to get myself familiar with the following technologies:
- Gradle: especially the multi-project feature
- Spring Data
- Spring Data REST
- React for Spring Boot project, link here
- JUnit 5 with Spring
- Spring Security with OAuth support
These are goals that I would like to achieve. However, they are deemed nice-to-have goals as they do not contribute to my learning for the time being.
- Setup and use HashiCorp Vault in my project, with the help of Spring Vault
- Setup Spring Cloud Config so that all my projects get the configuration from a common place. This is very useful for my integration-api project at work as well.
- Spring Rest Docs to document my REST APIs
Another goal is to learn React as the same time. However, this is stretch goal.
So far, I have got the following working
☑️ Having a springbootdb database
☑️ Setup uuid-ossp extension which allows UUID to be generated, based on this instruction
☑️ Verifying it works with the app
🔲 Setup correct index for the tables
Gradle is my company official build tool. It makes sense that I should at least be familiar with it.
☑️ Gradle multi-project approach
☑️ Setup inter-project dependencies
☑️ Setup common build scripts in parent project.
This is a very well known Spring project. It is necessary for me to know about it. I don't have to know it inside out. However, I have to know enough to be able to use it effectively.
☑️ Setup entity and repositories classes in data project
☑️ Setup a common data layer that other projects can use, based on this instruction
☑️ Verified that the data can be saved/retrieved from PostgreSQL database
🔲 Audit entity classes to make sure they follow good practice for JPA
This is a tool to manage different versions of the database migration script. This is very useful to ensure that the code that you work with is applicable to the database schema.
☑️ Add Flyway support for my project with the help of this link
☑️ Created migration scripts for the project
🔲 Create repeatable migration scripts. The reason is because I find that I keep having to drop and create database whenever I changed my schema. I will use this link to help me.
Spring Data REST generates REST endpoints for @Repository
classes automatically. This saves from having to write @RestController
classes by hand.
☑️ Setup the endpoints for all the available repositories in expense-tracker
🔲 Configure the JSON response so that it helps me to work with the response effectively. The current default JSON response (HAL based) is not very intuitive to work with.
I need a front end for my application. React fits the bill nicely as it is very popular at the moment. For this, I will use this tutorial as a guide.
☑️ Create an empty react project, called expense-ui
☑️ Configure the gradle build to build this project
🔲 Integrate with the expense-tracker back end
🔲 Testing with Jest framework
Obviously I need to perform testing for my application
🔲 Setup JUnit testing for data
🔲 Integrate with Test Containers
🔲 Setup JUnit testing for data-loader
🔲 Setup JUnit testing for expense-tracker
I need to create Docker images for the following applications