Skip to content
CAI
Software that uses CAICheck a score

eazybytes/event-driven-microservices

38.9

Weak · 21 September 2026

19.1k

lines of production code

Java

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Accounts service implements CQRS with Axon Framework

The accounts module now uses a Command-Query Responsibility Segregation (CQRS) architecture via Axon Framework. Command operations (create, update, delete) are routed through a \CommandGateway\ to an \AccountsAggregate\ that emits domain events. A separate query path uses a \QueryGateway\ and an \AccountProjection\ to read account data from a relational database (H2/MySQL) updated by event handlers. This introduces a new API surface for account management and querying, with validation and error handling for command execution.

section3/accounts · high confidence

Add CQRS-based account management with Axon Framework

The accounts module now implements a Command-Query Responsibility Segregation (CQRS) architecture using the Axon Framework. This introduces a command layer for account creation, update, and deletion via REST endpoints that dispatch commands to an aggregate, while a separate query layer handles account lookups. The change includes command and event classes, an aggregate root, a command interceptor for validation, and a projection handler that updates the read model, enabling eventual consistency between the command and query sides of the application.

(repo-wide) · high confidence

Add card, loan, and Eureka server microservices with API composition

This commit introduces the initial codebase for the Eazy Bank application, implementing a microservices architecture with API composition. It adds the Cards and Loans microservices, each featuring a REST controller, service layer, repository, and entity models for managing credit cards and loans respectively. Both services include global exception handling, DTOs, and JPA auditing. Additionally, it adds a Eureka server for service discovery and a shared common module containing a standard error response DTO.

(repo-wide) · high confidence

Add customer composite API for aggregated customer data

The gateway server now exposes a new /api/composite/fetchCustomerSummary endpoint that aggregates customer, account, loan, and card details into a single response. This is implemented via a new CustomerCompositeHandler that concurrently fetches data from the CustomerSummaryClient, which uses Spring WebFlux's WebClient to call the underlying microservices. The router maps the GET request to the handler, and DTOs (AccountsDto, CardsDto, CustomerDto, LoansDto, CustomerSummaryDto) are introduced to structure the data. Configuration in application.yml sets up the gateway routes and Eureka client.

_section1/01\end/gatewayserver · high confidence

Add customer summary composite endpoint to the gateway server

The gateway server now exposes a new /api/composite/fetchCustomerSummary endpoint that aggregates customer, account, loan, and card details into a single summary. This is implemented via a new CustomerCompositeHandler that concurrently fetches data from the respective microservices using a generated CustomerSummaryClient, and a corresponding router configuration. DTOs for each domain and a composite summary DTO are also added to support the response structure.

section3/gatewayserver · high confidence

Added CQRS and Event Sourcing setup guides for accounts, cards, and customer modules

Added documentation and configuration files to set up the Axon Framework for Command-Query Responsibility Segregation (CQRS) and Event Sourcing in the accounts, cards, and customer modules. Each module's README.md now includes instructions for adding the \axon-spring-boot-starter\ dependency, configuring the Axon Server connection in \application.yml\, creating command and query package structures, and updating the main application class to register command interceptors and event processing error handlers. Additionally, a new \section3/README.md\ provides a guide for setting up the Axon Server locally using Docker, and Maven wrapper scripts (\mvnw\, \mvnw.cmd\) and properties files were added to each module to standardize the build environment.

section3 · high confidence

Added Eureka Server and common error handling support

Introduced a new Eureka Server application configured to run on port 8070, enabling service discovery capabilities for the microservices architecture. Additionally, a standardized ErrorResponseDto was added to the common module to provide consistent error response formatting across services.

section3/eazy-bom/common, section3/eurekaserver · high confidence

CQRS and Event Sourcing demo for cards and loans

The cards and loans microservices now implement a CQRS and Event Sourcing architecture using the Axon Framework. Each service introduces command-side components (commands, aggregates, and event classes) alongside query-side components (queries, projections, and handlers) to manage state changes through domain events. This adds new REST endpoints for creating, updating, and deleting cards and loans, as well as query endpoints to retrieve their details, enabling a more robust and scalable approach to handling business logic and data consistency.

section3/cards, section3/loans · high confidence

Implemented account management via Event Sourcing and CQRS patterns

The accounts module now supports creating, updating, and deleting accounts using a command-driven architecture. Commands are processed by an aggregate that emits domain events, which are then used to update a read-optimized database view. This introduces a query controller and handler for retrieving account details, alongside a command controller for mutations. The system also includes a command interceptor for validation and a global exception handler for consistent error responses.

(repo-wide) · high confidence

Initial release of the Accounts and Cards microservices

The Accounts and Cards microservices are introduced, each providing REST APIs for account and card management respectively. The Accounts service exposes endpoints to create, fetch, update, and delete accounts, while the Cards service provides similar management capabilities. Both services implement JPA auditing to track creation and modification metadata, and include global exception handling to return standardized error responses. The Accounts service also integrates with a message broker to handle mobile number updates and rollbacks, supporting a choreography-based saga pattern for distributed transaction management.

(repo-wide) · high confidence

Initial release of the Accounts microservice

The Accounts microservice is introduced, providing a REST API for managing bank accounts. Users can create, fetch, update, and delete account records via endpoints at /api/create, /api/fetch, /api/update, and /api/delete. The service includes a Spring Boot application configuration, entity and DTO models, a service layer with business logic, a JPA repository, and a global exception handler for standardized error responses. The service is configured to run on port 8081 with an H2 in-memory database and registers with Eureka.

_section1/00\_start/accounts, section1/00\_start/customer, section1/01\end/accounts · high confidence

Initial release of the Cards, Loans, and Gateway services

This change introduces the foundational code for the Cards, Loans, and Gateway services, along with a Eureka server for service discovery. The Cards and Loans services provide REST APIs for creating, fetching, updating, and deleting records, utilizing JPA auditing for tracking creation and modification metadata. The Gateway server configures routing rules to direct requests to the appropriate microservices. Additionally, a common module is added to share error response structures across the application.

(repo-wide) · high confidence

Introduce customer summary aggregation endpoint

The gateway server now exposes a new /api/composite/fetchCustomerSummary endpoint that aggregates customer, account, loan, and card details into a single response. This is enabled by new DTOs (CustomerDto, AccountsDto, LoansDto, CardsDto, CustomerSummaryDto), a Spring WebFlux router and handler, and a WebClient-based client interface (CustomerSummaryClient) that calls the underlying microservices. The application.yml configures the gateway on port 8072 and registers with Eureka.

section4/gatewayserver · medium confidence

Launch of the Customer Service API

A new Customer service is introduced, providing REST endpoints to create, fetch, update, and delete customer records. The implementation includes a Spring Boot application entry point, a REST controller with validation, a service layer with business logic, and a JPA repository. The service also features global exception handling for validation errors, resource not found, and duplicate customer scenarios, alongside configuration for H2 database, Eureka registration, and Actuator endpoints.

_section1/01\end/customer · high confidence

Behavioural changes

Accounts service adopts CQRS and Event Sourcing via Axon Framework

The accounts module has been refactored to use a Command-Query Responsibility Segregation (CQRS) architecture powered by the Axon Framework. This introduces a new command layer with \AccountsCommandController\ and \AccountsAggregate\ to handle state-changing operations (create, update, delete) via Axon command gates, while a separate query layer (\AccountsQueryController\, \AccountsQueryHandler\, \AccountProjection\) handles read operations. The change includes new command and event classes, an aggregate root, and event-driven projections that keep the database in sync with domain events.

(repo-wide) · high confidence

Updated Maven wrapper scripts and configuration across multiple modules

Added or updated the Maven wrapper scripts (mvnw, mvnw.cmd) and configuration files (.mvn/wrapper/maven-wrapper.properties) for the accounts, cards, customer, and eazy-bom/common modules. The accounts, cards, and customer modules now use Maven 3.9.2 with wrapper version 3.2.0. The eazy-bom/common module has been upgraded to Maven 3.9.9 with wrapper version 3.3.2, which includes support for SHA-256 distribution checksums and improved cross-platform handling. A .gitignore file was also added for the eazy-bom/common module to exclude IDE and build artifacts.

section1 · high confidence

Dependencies

Added Axon Framework dependency for event sourcing

The eazy-bill of materials (BOM) was updated to include Axon Framework version 4.10.1, and the accounts, cards, and customer microservices now depend on the axon-spring-boot-starter library, enabling event sourcing capabilities in these services.

(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 42 → 39 (-2.7)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 97 (-2.3)
  • Architecture 100 → 99 (-1.3)
  • Maturity 42 → 48 (+6.0)
  • Readiness 24 → 26 (+1.4)
  • Security 50 → 35 (-14.8)
  • Domain Modelling 70 → 53 (-16.4)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (13)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (10 lines × 2) (section6/customer/src/main/java/com/eazybytes/customer/saga/UpdateMobileNumberSaga.java)
  • Duplicated block (24 lines × 3) (section4/accounts/src/main/java/com/eazybytes/accounts/command/interceptor/AccountsCommandInterceptor.java)
  • Duplicated block (8 lines × 3) (section6/customer/src/main/java/com/eazybytes/customer/saga/UpdateMobileNumberSaga.java)
  • Duplicated block (9 lines × 2) (section5/customer/src/main/java/com/eazybytes/customer/controller/CustomerController.java)
  • Duplicated block (9 lines × 5) (section6/accounts/src/main/java/com/eazybytes/accounts/exception/GlobalExceptionHandler.java)
  • No exposed public API
  • Scanner failed to run — not a clean result
  • Test reliability not included
  • complexity unreadable for .java — churn × complexity hotspots could not be measured
  • early-stage repository — too little history to judge knowledge freshness
  • single-maintainer — knowledge-concentration (bus factor) risk

New (181)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Duplicated block (10 lines × 2) (section6/customer/src/main/java/com/eazybytes/customer/saga/UpdateMobileNumberSaga.java)
  • Duplicated block (10 lines × 29) (section1/00_start/accounts/src/main/java/com/eazybytes/accounts/exception/GlobalExceptionHandler.java)
  • Duplicated block (10 lines × 3) (section1/00_start/customer/src/main/java/com/eazybytes/customer/service/impl/CustomerServiceImpl.java)
  • Duplicated block (10 lines × 4) (section3/accounts/src/main/java/com/eazybytes/accounts/command/controller/AccountsCommandController.java)
  • Duplicated block (10 lines × 7) (section1/00_start/cards/src/main/java/com/eazybytes/cards/exception/GlobalExceptionHandler.java)
  • Duplicated block (11 lines × 3) (section1/00_start/cards/src/main/java/com/eazybytes/cards/controller/CardsController.java)
  • Duplicated block (11 lines × 3) (section1/00_start/cards/src/main/java/com/eazybytes/cards/controller/CardsController.java)
  • Duplicated block (11 lines × 3) (section1/00_start/cards/src/main/java/com/eazybytes/cards/service/impl/CardsServiceImpl.java)
  • Duplicated block (11 lines × 3) (section1/00_start/loans/src/main/java/com/eazybytes/loans/service/impl/LoansServiceImpl.java)
  • Duplicated block (11 lines × 4) (section3/cards/src/main/java/com/eazybytes/cards/command/controller/CardCommandController.java)
  • Duplicated block (11 lines × 4) (section3/loans/src/main/java/com/eazybytes/loans/command/controller/LoanCommandController.java)
  • Duplicated block (12 lines × 3) (section1/00_start/accounts/src/main/java/com/eazybytes/accounts/controller/AccountsController.java)
  • Duplicated block (12 lines × 3) (section1/00_start/accounts/src/main/java/com/eazybytes/accounts/controller/AccountsController.java)
  • Duplicated block (12 lines × 3) (section1/00_start/customer/src/main/java/com/eazybytes/customer/controller/CustomerController.java)
  • Duplicated block (12 lines × 3) (section1/00_start/loans/src/main/java/com/eazybytes/loans/controller/LoansController.java)
  • Duplicated block (12 lines × 3) (section1/00_start/loans/src/main/java/com/eazybytes/loans/controller/LoansController.java)
  • Duplicated block (12 lines × 4) (section3/accounts/src/main/java/com/eazybytes/accounts/command/interceptor/AccountsCommandInterceptor.java)
  • Duplicated block (12 lines × 4) (section3/cards/src/main/java/com/eazybytes/cards/command/interceptor/CardCommandInterceptor.java)
  • Duplicated block (12 lines × 4) (section3/customer/src/main/java/com/eazybytes/customer/command/interceptor/CustomerCommandInterceptor.java)
  • …and 161 more

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

Survey your own repository

eazybytes/event-driven-microservices 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 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 19c179ce55a7545ec1e639119b8490d008895edc — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.