Welcome to the XKCD Data Hub! 👋
Imagine fetching your favorite XKCD comics, streaming them to a service that neatly organizes everything using some cool engineering tricks, and then serving it all up to your eager fingertips. That's what this project is all about! 🎉
- Fetch the latest XKCD comic information.
- Stream data to a projection service using CQRS and the outbox pattern.
- Serve data from an Event Store to the client.
- Easy setup and deployment using Docker Compose.
- Docker and Docker Compose
- JDK 21 or higher
- Kotlin 2.0 or higher
- Gradle build system
-
Clone the Repository:
$ git clone https://github.com/yonatankarp/xkcd-data-hub.git $ cd xkcd-data-hub
-
Build the Project:
./gradlew build
-
Run the Infrastructure using Docker Compose:
docker-compose up -d
This will start all the necessary infrastructure including databases, message brokers, and any other related components.
The project contains multiple submodules. Here's a brief overview of each:
- Gateway - A facade for the client application to interact with.
- Fetcher - Built using ktor, collects information about XKCD comics, and streams it to the projection service.
- Data Processor - stores and serves XKCD comic data to clients.
- Client Application - provides a user interface to interact with the XKCD data via API.
The following diagram describes the end goal of this repository: