The application registers pools and users votes as well as returns the pools' result.
This is a playground project that I will maintain in my spare time. I want to use it to create a journey to practice new approaches and perfect the known ones.
- Java 17 - The latest LTS version
- Spring Boot 3.1.1 - The latest version
- Spring Data JDBC - I get to test/master my knowledge related to it
- H2 (Postgres compatibility) - For now, it's enough
- Lombok - I like working with such a tools as it helps to deal with Java verbosity
- Clean Architecture(Pragmatic) - I have worked with many approaches. IMO, this one has proved the most pragmatic and flexible
- TSID - It's a UUID that works really well as primary key
The main goal while creating the first version is to have a POC at the end. That's the opportunity to understand the domain, user behavior while using the application and what we can do better in the next phase. Here is the V1.
At this moment, only the main needs were addressed, in other words, the Non-Functional Requirements and the Application Design were left aside. For now, only the feasibility matters.
I created a few Integrated Tests. The tests provide a quick way to validate everything at once as the application is still changing.
In addition to the requirements listed below, I'd like to give a chance to AI as a copilot ;)
- Remove Pool Options Gateway
- Validate the domain and endpoint attributes according to their needs
- Replace the current exceptions with customized ones
- Handle the Pool and Pool Options according to the relation Aggregate and Aggregate Root
- I dropped this requirement. How Spring Data JDBC handles the aggregate and root relationship doesn't address the application requirements. In short, the aggregated items are deleted and recreated whenever it changes.
- Implement the controller advice and define a well-structured error response.\
- The error message must contain the error code and details.
- The http status response should follow the RestFul best practices.
- Implement the unit tests
- I postponed this task. I implemented some unit tests by using AWS Code Whisperer and I got surprised how it incredibly works well.
BTW, I'm still using the free version.
- I postponed this task. I implemented some unit tests by using AWS Code Whisperer and I got surprised how it incredibly works well.
- Refactor the Integration Tests
- https://www.baeldung.com/javax-validation-method-constraints
- https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-builtin-method-constraints
- https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-validating-executable-constraints
- Provision Postgres with Docker
- Create database tables with Flyway/Liquibase
- Create service image, docker compose, etc. Set the same settings for the resource as the backend contest(rinha de backend)
- Create Performance Tests