Skip to content
CAI
Software that uses CAICheck a score

romankudryashov/event-driven-architecture

52.1

Adequate · 5 August 2026

2k

lines of production code

Kotlin

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a microservices-based library management platform comprising book, user, and notification services, each backed by dedicated PostgreSQL databases. It implements an event-driven architecture using Kafka for asynchronous communication and schema management, while relying on Spring Boot and Kotlin for service implementation. The system handles core domain operations such as book and author management, user data processing, and email notification delivery via scheduled tasks and inbox/outbox patterns.

Features

Added Caddy reverse proxy and supporting infrastructure

A new Caddy reverse proxy has been introduced to route traffic to the book and notification services, with rate-limiting applied to each. The configuration includes a custom Caddy build with the rate-limiting plugin, alongside supporting files for pgadmin (server and preference configurations), a Postman collection for API testing, and a SQL script for database seeding.

misc · high confidence

Added Kafka Connect configurations for book, user, and notification services

New connector configurations have been added to the \kafka-connect\ directory, establishing data pipelines for the book, user, and notification domains. This includes source connectors (\book.source\, \user.source\, \user.source.streaming\) that capture PostgreSQL changes using Debezium, and sink connectors (\book.sink\, \user.sink\, \notification.sink\) that write to JDBC targets. The setup also includes dead-letter queue (DLQ) connectors for error handling and a \load-connectors.sh\ script to automate the deployment of these connectors to the Kafka Connect cluster.

kafka-connect · high confidence

Initial project setup with microservices, infrastructure, and tooling

The project is initialized with a complete microservices architecture including book, user, and notification services, each with dedicated PostgreSQL databases. The setup includes Kafka, Kafka Connect, and Apicurio Registry for event streaming and schema management. Development tooling such as Caddy reverse proxy, pgAdmin, and Kafka UI are configured via Docker Compose. A restart script and Gradle wrapper are added to streamline local development and image building.

(repo-wide) · high confidence

Initial release of the user-service with inbox/outbox messaging support

The user-service is introduced as a new component in the system, implementing the Inbox and Transactional Outbox patterns to handle incoming events and ensure reliable message delivery. The service manages user data and processes inbox messages via scheduled tasks, while also generating notifications and outbox messages for book and author changes. This includes database migrations for the 'library\_user' and 'inbox' tables, configuration for asynchronous processing, and the core service implementations that route events to appropriate handlers.

user-service · high confidence

Introduce notification-service for processing inbox messages via scheduled tasks

A new notification-service is added to handle incoming events and process them using an inbox pattern. The service defines an InboxMessage entity and repository to track message status (New, ReadyForProcessing, Completed, Error) and error details. It includes a scheduled task (InboxProcessingTask) that periodically marks messages as ready for processing and processes them in batches using virtual threads. The service also provides an EmailService interface with implementations for actual email sending and a WebSocket-based stub for testing/demo purposes. Configuration includes Spring Boot application setup, WebSocket configuration for STOMP messaging, and database migration scripts for the inbox table.

notification-service · high confidence

Introduce shared domain models and runtime hints for event-driven architecture

Added new Kotlin classes in the common-model module to support an event-driven architecture. This includes data models for Book, Author, BookLoan, and Notification, as well as event types (BookCreated, BookChanged, etc.) and an OutboxMessage class for direct writes to the write-ahead log (WAL). Additionally, Spring runtime hints are registered to enable reflection-based serialization and deserialization for these domain objects.

common-model · high confidence

New book-service module with book and author management capabilities

A new book-service module has been introduced, providing REST APIs for managing books and authors. Users can now create, update, and delete books and authors, as well as handle book lending and returns. The service also supports processing incoming events for rollback scenarios and publishes outbox messages for various book and author state changes.

book-service · 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 update ensures the project uses a newer, supported version of the Gradle build tool, which may include performance improvements, bug fixes, and new features available in the 8.14.x release line.

gradle · high confidence

Removed default Spring Boot application entry point and configuration

The default Spring Boot application class and the empty application.properties file have been removed from the project. This change reflects the transition to a multi-module structure, where the main application entry point and global configuration are no longer required in this specific module.

src/main · medium confidence

Dependencies

Migrate to Spring Boot 3.5.4 and Kotlin 2.2.0 with multi-module structure

The project has been refactored from a single-module application into a multi-module structure, introducing \book-service\, \user-service\, \notification-service\, and a shared \common-model\ module. This change upgrades the core dependencies to Spring Boot 3.5.4 and Kotlin 2.2.0, moving the Java target from 17 to 21. The build configuration now uses Gradle version catalogs for dependency management, replacing the previous hardcoded dependency declarations.

(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 53 → 52 (-1.0)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.08.19) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 54 → 49 (-5.5)
  • Readiness 47 → 47 (+0.0)
  • Security 50 → 50 (-0.3)
  • Accessibility 60 → 60 (+0.0)

Resolved (3)

  • Duplicated block (11 lines × 3) (book-service/src/main/kotlin/com/romankudryashov/eventdrivenarchitecture/bookservice/task/InboxProcessingTask.kt)
  • Duplicated block (12 lines × 3) (book-service/src/main/kotlin/com/romankudryashov/eventdrivenarchitecture/bookservice/service/impl/InboxMessageServiceImpl.kt)
  • Duplicated block (12 lines × 3) (book-service/src/main/kotlin/com/romankudryashov/eventdrivenarchitecture/bookservice/service/impl/InboxMessageServiceImpl.kt)

New (4)

  • Duplicated block (10 lines × 3) (book-service/src/main/kotlin/com/romankudryashov/eventdrivenarchitecture/bookservice/service/impl/InboxMessageServiceImpl.kt)
  • Duplicated block (10 lines × 3) (book-service/src/main/kotlin/com/romankudryashov/eventdrivenarchitecture/bookservice/task/InboxProcessingTask.kt)
  • Duplicated block (11 lines × 3) (book-service/src/main/kotlin/com/romankudryashov/eventdrivenarchitecture/bookservice/service/impl/InboxMessageServiceImpl.kt)
  • Medium IaC: CKV_DOCKER_3 (misc/caddy/Dockerfile)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

romankudryashov/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 5 August 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.08.19 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.