rkudryashov/event-driven-architecture
57.3
Adequate · 7 October 2026
2k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
Features
Added Caddy reverse proxy, pgadmin configuration, and Postman test collection
A new Caddy reverse proxy is introduced to route traffic to the book-service and notification-service, each protected by a rate limiter (6 and 30 events per minute respectively). The Caddy binary is built with the caddy-ratelimit plugin. Additionally, pgadmin is configured with server definitions for book-db, user-db, and notification-db, along with a pgpass file for authentication. A Postman collection named 'Event-driven architecture demo' is added, containing test requests for Kafka Connect, book-service (CRUD operations and authors), and other endpoints.
misc · high confidence
Added Kafka Connect configurations for book, user, and notification services
New Kafka Connect connector configurations have been added to enable data replication and event streaming for the book, user, and notification services. The setup includes source connectors (book.source, user.source, user.source.streaming) that capture database changes using Debezium, and sink connectors (book.sink, notification.sink, user.sink) that persist these changes to PostgreSQL databases. Additionally, dead-letter queue (DLQ) connectors are configured to handle failed messages, and a shell script is provided to automatically load all these connectors into Kafka Connect.
kafka-connect · high confidence
Initial project setup with Docker Compose infrastructure and Caddy reverse proxy
The project is initialized with a complete Docker Compose infrastructure, defining microservices (book, user, notification) and their databases (Postgres 17.5) with health checks. The setup includes Kafka, Kafka Connect, and Apicurio Registry for event streaming. A Caddy reverse proxy is introduced to handle traffic on ports 80 and 443, and the Gradle wrapper scripts are updated to use the JAR directly. The README is also updated to reflect the modern Java technology stack.
(repo-wide) · high confidence
Introduce book-service with API, service, and persistence layers
The book-service module is introduced, providing a new service for managing books and authors. This includes API delegates for handling HTTP requests, service interfaces and implementations for business logic (including book lending and author updates), and persistence layers with JPA entities and repositories. The service also implements inbox/outbox patterns for event-driven architecture, with separate transactional boundaries for processing incoming events and publishing outgoing messages.
book-service · high confidence
Introduce notification-service for handling and delivering notifications
Added a new notification-service that processes incoming events and delivers notifications via email. The service uses an inbox pattern with separate transactions for processing batches of messages, supporting both email delivery and WebSocket-based notifications. Includes configuration for Spring Boot, WebSocket messaging, and database entities for tracking message status.
notification-service · high confidence
Introduce user-service with Inbox and Outbox patterns for event-driven processing
The user-service is introduced, implementing the Inbox and Transactional Outbox patterns to handle incoming events and publish commands. The service manages user data and processes inbox messages via a scheduled task, utilizing separate transactions for inbox processing and direct writes to the Write-Ahead Log (WAL) for outbox messages. This includes new entities (UserEntity, InboxMessageEntity), repositories, and service implementations that coordinate event processing, notification creation, and message persistence.
user-service · high confidence
Introduces shared domain models and event types for the event-driven architecture
Adds new data and event models to the common-model module, including entities for books, authors, and notifications, as well as an outbox message structure for direct writes to the write-ahead log. This also includes Spring runtime hints to ensure proper reflection-based serialization and deserialization of these domain objects.
common-model · high confidence
Behavioural changes
Gradle wrapper updated to version 8.14.3
The Gradle wrapper has been upgraded from version 8.8 to 8.14.3. This change ensures that the project uses a newer, more stable version of the Gradle build tool, which may include performance improvements, bug fixes, and new features available in the updated release.
gradle · medium confidence
Removed legacy application entry point and configuration
The main application class (SpringEdaDemoApplication) and the default application.properties configuration file have been removed from the project. This change reflects the transition to a multi-module structure, where the previous single-module entry point and configuration are no longer used.
src/main · high confidence
Dependencies
Migrate to Spring Boot 3.5.4 and Kotlin 2.2.0
The project has been upgraded to Spring Boot 3.5.4 and Kotlin 2.2.0, moving the Java target from 17 to 21. This change also introduces a multi-module Gradle structure with separate build configurations for book-service, user-service, notification-service, and common-model, replacing the previous single-module setup.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 58 → 57 (-0.3)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 98 → 86 (-12.2)
- Architecture 94 → 96 (+1.4)
- Maturity 54 → 54 (+0.0)
- Readiness 53 → 53 (+0.5)
- Security 61 → 67 (+6.1)
- Accessibility 60 → 56 (-3.9)
Resolved (1)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
New (135)
- Off the main sequence: :common-model
- Outdated (compile): ch.qos.logback:logback-classic
- Outdated (compile): ch.qos.logback:logback-core
- Outdated (compile): com.fasterxml.jackson.core:jackson-annotations
- Outdated (compile): com.fasterxml.jackson.core:jackson-core
- Outdated (compile): com.fasterxml.jackson.core:jackson-databind
- Outdated (compile): com.fasterxml.jackson.dataformat:jackson-dataformat-toml
- Outdated (compile): com.fasterxml.jackson.datatype:jackson-datatype-jdk8
- Outdated (compile): com.fasterxml.jackson.datatype:jackson-datatype-jsr310
- Outdated (compile): com.fasterxml.jackson.module:jackson-module-kotlin
- Outdated (compile): com.fasterxml.jackson.module:jackson-module-parameter-names
- Outdated (compile): com.fasterxml.jackson:jackson-bom
- Outdated (compile): com.fasterxml:classmate
- Outdated (compile): com.google.errorprone:error_prone_annotations
- Outdated (compile): com.google.guava:guava
- Outdated (compile): com.google.j2objc:j2objc-annotations
- Outdated (compile): com.jayway.jsonpath:json-path
- Outdated (compile): com.sun.istack:istack-commons-runtime
- Outdated (compile): com.zaxxer:HikariCP
- Outdated (compile): io.github.java-diff-utils:java-diff-utils
- …and 115 more
Architecture
- 0 containers · 4 bounded contexts · 3 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
rkudryashov/event-driven-architecture was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 7 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit de985332f0c423520c120f2a9f0c46cffe055fec — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-8d8088103122.