Skip to content
CAI
Software that uses CAICheck a score

sayed_moin_ahmed/event-sourcing-examples

37.7

Weak · 22 September 2026

58.7k

lines of production code

JavaScript

with Java, Scala

6

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This is a banking application demonstrating event sourcing and CQRS patterns, implemented in both Java and Scala Spring Boot microservices. It manages account creation, customer data, and money transfers through a command-side that processes domain events and a query-side that maintains MongoDB read models. The system is supported by a React-based web frontend and includes comprehensive integration and end-to-end tests.

How it got here

2014–2015 — Java and Scala Spring Boot examples

15 changes.

This period focused on establishing complete, modularized Java and Scala Spring Boot examples for event sourcing and CQRS patterns. The work included setting up build infrastructure, implementing domain models and microservices, and adding comprehensive integration and end-to-end tests for both stacks.

2016–2017 — Initial microservices and frontend architecture

14 changes.

This period focused on establishing the foundational infrastructure for a microservices-based banking application, introducing an API gateway, authentication modules, and core domain services like accounts and customers. Simultaneously, the team built out the React-based frontend and implemented integration tests to verify the new system's behavior.

Features

Add Scala-based command and query sides for the accounts and transactions domains

The application now includes a full Scala implementation for the bank's accounts and money transfer features. On the command side, new Scala services handle account creation, debiting, crediting, and money transfers via REST controllers. On the query side, a new service updates and queries account information from a MongoDB store, exposing endpoints to retrieve account details and transaction history. This adds a parallel Scala implementation alongside the existing Java/Spring Boot stack.

(repo-wide) · high confidence

Added Gradle plugins to configure and verify Eventuate dependencies and environment

Three new Gradle build plugins were added to the java-spring buildSrc: EventuateDependencyPlugin, VerifyEventStoreEnvironmentPlugin, and VerifyMongoDBConfigurationPlugin. The dependency plugin conditionally includes either the Eventuate Local JDBC and embedded CDC autoconfigure libraries or the standard Eventuate client HTTP/STOMP library based on the 'eventuateDriver' property. The environment verification plugins ensure that required environment variables (EVENTUATE\_API\_KEY\_ID, EVENTUATE\_API\_KEY\_SECRET, and SPRING\_DATA\_MONGODB\_URI) are set before running tests, warning or throwing errors if they are missing.

java-spring/buildSrc · high confidence

Added account and transaction data models

New Java classes have been introduced to support account and transaction operations, including request and response models for creating and retrieving accounts, money transfers, and account history. These models define the structure for account creation, deletion, status updates, and transaction details, enabling the backend to handle these core banking operations.

java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts · high confidence

Added accounts and accounts-view services with event-driven architecture

Introduced the accounts-service backend and web layer, including the Account aggregate, command handlers, and REST controllers for creating and deleting accounts. Added the accounts-view-service to maintain a MongoDB-backed read model, updating account information and transaction history via event handlers. Included integration and unit tests for both services.

(repo-wide) · high confidence

Added authentication controller and error handling models

Users can now authenticate via a new /api/login endpoint that issues an access-token header upon successful login, and the system returns a standardized ErrorResponse format for errors such as a missing customer.

java-spring/common-auth-web/src/main · high confidence

Added common authentication module with token and HTTP Basic support

A new shared authentication module has been introduced to the banking application, providing a centralized configuration for securing API endpoints. This module supports simultaneous authentication via HTTP Basic credentials and stateless token-based authentication (using an 'access-token' header). It includes a custom filter to validate tokens, a service layer to verify customer credentials against a MongoDB repository, and Spring Security configuration to permit public access to specific endpoints like '/api/login' and '/api/customers' while protecting others.

java-spring/common-auth · medium confidence

Added request transformation utilities for the API gateway

The API gateway service now includes new utility classes to handle HTTP request transformation. Specifically, \URLRequestTransformer\ maps incoming requests to backend service URLs, \HeadersRequestTransformer\ manages header forwarding (such as the \x-access-token\), and \ContentRequestTransformer\ handles request body content. These components form a chain to process and forward client requests to the appropriate backend services.

java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils · high confidence

Initial Java/Spring Event Sourcing example with Docker and Swagger

The java-spring directory now contains a complete, modularized Java/Spring Boot example application for event sourcing and CQRS. The project includes microservices for accounts, customers, and transactions, each with their own Dockerfiles and Docker Compose configurations for local development using Eventuate Local. The setup includes Swagger UI integration for API documentation and includes helper scripts for building, testing, and interacting with the services.

java-spring · high confidence

Initial configuration for the new API gateway service

The api-gateway-service is introduced with its core configuration files. The application.properties file defines the routing rules for the API gateway, mapping specific HTTP methods and paths (such as /api/accounts, /api/customers, and /api/transfers) to the corresponding backend services (accounts, customers, transfers) on localhost:8080. Additionally, a logback.xml file is added to configure logging, setting the root logger to error level with console output, while enabling info-level logging for Spring and specific application packages.

java-spring/api-gateway-service/src/main/resources · high confidence

Initial frontend build and configuration

The js-frontend directory now includes the necessary build artifacts and configuration files to compile and run the React application. This includes a .babelrc file for transpiling ES2015, Stage-0, and React code, a .gitignore file to exclude node\_modules and build outputs, a README with setup instructions, and the initial compiled JavaScript bundle (app.30980d75b78111237ddf.js) which sets up the React Router, Redux store, and authentication components.

js-frontend · high confidence

Initial implementation of the API Gateway service

Added the core Java classes for the API Gateway service, including configuration, a custom RestTemplate setup for HTTP client support, error handling, and the main application entry point. This introduces the foundational infrastructure for the gateway's HTTP communication layer.

java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway · high confidence

Initial release of the Scala/Spring Event Sourcing example

Introduces a Scala/Spring Boot example application demonstrating event sourcing and CQRS patterns. The project includes microservices for account management, money transfers, and query-side MongoDB views, along with Gradle build scripts, Docker Compose configuration for deployment, and helper scripts for testing the REST APIs.

scala-spring · high confidence

Introduce prebuilt web client for the Money Transfer App

Added the prebuilt-web-client directory containing the main HTML entry point and the compiled JavaScript bundle (main-3c1aebc49347fa338f9c.js). The HTML file loads Bootstrap 3.3.6 and a custom style2.css, while the JavaScript bundle includes React, Redux, React Router, and application-specific modules for account and transfer management, enabling the client-side application to run.

prebuilt-web-client · high confidence

Introduced new domain events for accounts, customers, and transactions

Added a comprehensive set of new domain event classes to the common backend module, including account lifecycle events (Opened, Credited, Debited, Deleted, and a generic Changed event), customer events (Created, AddedToAccount, Deleted), and money transfer events (CreditRecorded, DebitRecorded, FailedDebitRecorded, and MoneyTransferCreated). These classes define the data structures for the system's state changes, with TransferDetails capturing transfer specifics like amounts, dates, and descriptions. A serialization test was also added to verify the JSON mapping for account events.

java-spring/common-backend · high confidence

New API Gateway Controller for request proxying

Added a new GatewayController that acts as a reverse proxy for the banking API. It intercepts GET, POST, and DELETE requests matching /api/\\, forwards them to backend services using Apache HttpClient, and returns the backend's HTTP status code and Content-Type header to the client.

java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/controller · high confidence

New money transfer capability in the Scala Spring example application

The Scala Spring example now includes a complete money transfer feature. This adds a new \transactions-command-side-backend\ module containing the domain logic, including the \MoneyTransfer\ aggregate, commands, events, and event handlers. The monolithic service is updated to wire in these new transaction components. Additionally, standalone command-side and query-side services are introduced for accounts and transactions, each with their own configuration and integration tests, allowing the application to be run as separate microservices.

(repo-wide) · high confidence

Behavioural changes

Added customer and account data models to the common module

New DTOs for customer and account information have been added to the common module, including CustomerInfo, UserCredentials, Name, Address, CustomerResponse, ToAccountInfo, and AddToAccountResponse. These classes define the structure for customer details (name, SSN, phone, address, and credentials) and account metadata, supporting the refactored API endpoints for managing customer and account data.

java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers · medium confidence

Added environment variable validation for Eventuate and MongoDB

Build scripts now enforce that required environment variables are set before running tests. A new Gradle plugin checks for the presence of EVENTUATE\_API\_KEY\_ID and EVENTUATE\_API\_KEY\_SECRET for Eventuate integration, and verifies that SPRING\_DATA\_MONGODB\_URI is defined for MongoDB configuration, ensuring the environment is correctly configured for the test suite.

scala-spring/buildSrc · high confidence

Updated license and added build/test scripts

The project license was changed from a proprietary notice to the Apache License, Version 2.0. Additionally, new shell scripts (\_build-and-test-all.sh, wait-for-docker-services.sh, wait-for-services.sh) were added to automate building and testing the application using Docker Compose, and the .gitignore file was updated to exclude build artifacts and logs.

(repo-wide) · high confidence

Test coverage

Added backend integration tests for money transfer functionality; Added end-to-end test for bank account and money transfer workflows; Added end-to-end test for the bank web application; Added integration tests for customer query side; Added integration tests for the account query side; Added integration tests for the authentication controller; Added integration tests for the bank's money transfer functionality; Added integration tests for the banking web layer; New test utilities for REST API and entity event validation.

Dependencies

Initial Java and Scala Spring Boot examples with Eventuate dependencies

Added build configuration for Java and Scala Spring Boot examples, including Gradle build files and dependency manifests. The Java examples use Spring Boot 1.3.5.RELEASE and Eventuate Client 0.14.0.RELEASE, while the Scala examples use Spring Boot 1.2.8.RELEASE and Eventuate Client 0.12. The JavaScript frontend project includes dependencies for React, Redux, and related libraries.

(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 46 → 38 (-8.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 61 → 46 (-15.0)
  • Architecture 77 → 80 (+2.8)
  • Maturity 53 → 53 (+0.0)
  • Readiness 29 → 30 (+0.6)
  • Security 92 → 92 (+0.0)
  • Accessibility 31 (new)

Resolved (20)

  • Change coupling: ACTION_TYPES.js ↔ MyAccounts.js (js-frontend/src/constants/ACTION_TYPES.js)
  • Change coupling: ACTION_TYPES.js ↔ api.js (js-frontend/src/constants/ACTION_TYPES.js)
  • Change coupling: App.js ↔ ACTION_TYPES.js (js-frontend/src/App.js)
  • Change coupling: App.js ↔ EmailSignInForm.js (js-frontend/src/App.js)
  • Change coupling: App.js ↔ EmailSignUpForm.js (js-frontend/src/App.js)
  • Change coupling: EmailSignInForm.js ↔ EmailSignUpForm.js (js-frontend/src/controls/bootstrap/EmailSignInForm.js)
  • Change coupling: EmailSignUpForm.js ↔ SignIn.js (js-frontend/src/controls/bootstrap/EmailSignUpForm.js)
  • Change coupling: MyAccounts.js ↔ SignIn.js (js-frontend/src/views/MyAccounts.js)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Medium IaC: CKV_DOCKER_3 (java-spring/accounts-service/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (java-spring/accounts-view-service/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (java-spring/api-gateway-service/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (java-spring/customers-service/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (java-spring/customers-view-service/Dockerfile)
  • Medium IaC: CKV_DOCKER_3 (java-spring/transactions-service/Dockerfile)
  • No exposed public API
  • Scanner failed to run — not a clean result
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (27)

  • Change coupling: AuthController.java ↔ AuthConfiguration.java (java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/controller/AuthController.java)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (js-frontend/README.md)
  • Duplicated block (11 lines × 2) (java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/RestUtil.java)
  • Duplicated block (15 lines × 2) (java-spring/accounts-view-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/accountsviewservice/backend/QuerySideDependencyChecker.java)
  • Duplicated block (22 lines × 2) (java-spring/accounts-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/accountsservice/backend/OpenAccountCommand.java)
  • Duplicated block (23 lines × 2) (java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/RestTemplateErrorHandler.java)
  • Duplicated block (23 lines × 2) (java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/AuthRequest.java)
  • FixmeComment (scala-spring/accounts-query-side-service/src/test/scala/net/chrisrichardson/eventstore/examples/bank/web/AccountsQuerySideServiceIntegrationTest.scala)
  • FixmeComment (scala-spring/transactions-command-side-service/src/test/scala/net/chrisrichardson/eventstore/examples/bank/web/TransactionsCommandSideServiceIntegrationTest.scala)
  • Medium IaC: WD-DOCKER-0003 (java-spring/accounts-service/Dockerfile)
  • Medium IaC: WD-DOCKER-0003 (java-spring/accounts-view-service/Dockerfile)
  • Medium IaC: WD-DOCKER-0003 (java-spring/api-gateway-service/Dockerfile)
  • Medium IaC: WD-DOCKER-0003 (java-spring/customers-service/Dockerfile)
  • Medium IaC: WD-DOCKER-0003 (java-spring/customers-view-service/Dockerfile)
  • Medium IaC: WD-DOCKER-0003 (java-spring/transactions-service/Dockerfile)
  • No assertions: shouldCreateAccount (java-spring/accounts-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/accountsservice/web/AccountControllerIntegrationTest.java)
  • No assertions: shouldCreateAccount (java-spring/transactions-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/transactionsservice/web/MoneyTransferControllerIntegrationTest.java)
  • No assertions: shouldCreateAccountsAndTransferMoney (java-spring/accounts-view-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/AccountsQuerySideServiceIntegrationTest.java)
  • No assertions: shouldCreateAccountsAndTransferMoney (java-spring/transactions-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/transactionsservice/TransactionsCommandSideServiceIntegrationTest.java)
  • …and 7 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

sayed_moin_ahmed/event-sourcing-examples 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 22 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 7dcafe5deabb6cd55c414eaa611e8537ea39df2e — 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-821afab8930d.