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
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.