This is a sample competitive programming and interview problem utility microservices monorepo allowing users to keep track of problems they have solved, what platform, what language, how quick, when, how often, and to get notifications of what they should work on, their activity (daily, weekly, monthly, yearly, etc.), and anything else that comes to mind when building it.
Config Server:
This server is responsible for managing the configuration for microservices and servers in the application.
- Spring Cloud Config Server → config-server
API Gateway:
This is responsible for authentication via JWT and routing requests to their intended microservices.
- Spring Cloud Gateway → problem-gateway
Discovery Service:
This is responsible for registering and discovering microservices in the application.
- Spring Cloud Eureka Server → service-discovery
Microservices:
This microservice is responsible for managing problems and their associated data.
- Java & Spring Boot → problem-service
This microservice is responsible for managing user accounts and their associated data.
- Java & Spring Boot → account-service
This microservice is responsible for generating reports and analytics based on user data related to problems and user activity.
- Report Service [Later]
This microservice is responsible for generating recommendations based on user activity and goals.
- Recommendation Service [Later]
Databases:
This database is responsible for storing data related to problems, users, and user activity.
- Oracle DB
- Java 21
- Docker
- Docker Compose
To get started:
- Clone the repository.
- Navigate to development
- Run
docker compose up -d databaseto bootstrap the database. The database will be set up automatically, and be ready to use in less than a minute.
To get started:
- Run
docker compose up -dto get the remaining services up
To get started:
- Head to config server, start it, and review the configuration files and adjustdock as needed in the resources/config directory.
- Head to service-discovery and start it.
- Head to problem-gateway and start it. Send your requests through this with the service name as a prefix.
- Head to each of the microservices (problem-service, account-service) and start them.
- Move authentication from gateway to a new authentication microservice
- Finish implementing and setting up the authentication microservice
- Get user problem fetching set up
- Test existing functionality more
- Expand problem service functionality
Currently, I keep track of what problem's I've solved, when, and how many times. I'd like to expand this, and make it easier for me to track so I can keep up to date and not miss out on any categories or forget how to solve a particular problem.
Additionally, this is an exploratory project for me to fill in some gaps in my experience, such as:
- Microservices
- Oracle DB
- UI Development, specifically try out a few different kinds, like TUI or Angular
- Kubernetes
- Cloud Providers like Azure or areas in cloud providers that I lack a lot of experience, such as GCP and AWS with EKS
- Jenkins build system
- Testing, specifically with UI, full system, load, stress, etc.
This project is licensed under the MIT License.