The project's description is available in docs/requirements.md. This was made as part of a challenge in early 2021. Let me know how you would approach the project!
The application explores:
- Hexagonal architecture leveraging Spring-Boot's dependency injection
- Spring Data.
- Spring Webflux.
- Swagger + SprintBoot.
- Gradle Kotlin DSL,
buildSrc
and submodules. - Containerization either through docker-compose or through Kubernetes.
You will find my notes on the project under docs/project-notes.md, and notes regarding production readiness under docs/production-checklist.md.
Requirements:
- Java 11
Docker image:
$ make build
Locally:
$ make build-local
Create if absent the docker images:
$ make build
Then follow the k8s guide at k8s/README.md.
$ make run
$ make run-local
Application:
- API-Docs: http://localhost:8080/swagger-ui.html.
Management:
- Liveness Probe: http://localhost:8081/actuator/health/liveness
- Readiness Probe: http://localhost:8081/actuator/health/readiness
- Prometheus Metrics: http://localhost:8081/actuator/prometheus
Note: Kubernetes uses different ports. See the guide there to see which ports it uses.
As it runs in the continuous-integration leveraging local containers using docker-compose:
$ make test
In order to run locally (for speed at the expense of slight inaccuracy):
$ make test-dependencies-up
You may now run the test
gradle target or directly in IntelliJ.
Linter:
$ make lint
Format:
$ make format
domain
: Business rules.infrastructure
: Interaction with the infrastructure (Database).web-app
: Exposes HTTP interface.common-test
: As the name says.db
: Data migrations scripts.docs
: Relevant documentation.ci
: Continuous integrations scripts.buildSrc
andgradle
: Relevant folders to build the project itself.k8
: Folder demonstrating how to deploy the application on K8S.