chaokunyang/microservices-event-sourcing
34.6
Weak · 22 September 2026
79.7k
lines of production code
JavaScript
with Java
7
measurements over time
What this system is
This system is a microservices-based online store platform that implements event sourcing for managing order and shopping cart states. It provides core e-commerce capabilities including user authentication, product catalog management, inventory tracking, and payment processing. The architecture utilizes a service mesh with Eureka for discovery, Zuul for API gateway routing, and Hystrix for fault tolerance, supported by a centralized configuration service.
Features
Account service introduces JPA-based database initialization for development environments
The account-service now includes a DatabaseInitializer component that automatically populates the database with demo data (accounts, customers, addresses, and credit cards) when running in the 'dev' profile. This allows developers to quickly set up a working state for end-to-end integration testing without manual database setup. The service also configures Spring Data JPA to auto-generate the database schema during development, simplifying the initial setup process.
account-service · high confidence
Add Eureka-based service discovery server
The discovery-service module now provides a functional Eureka server for service registration and discovery. The application is configured to run on port 8761, with client-side registry operations disabled to operate as a standalone server. This enables other microservices in the platform to register themselves and discover peers via the service registry.
discovery-service · high confidence
Add Hystrix Dashboard service for monitoring microservices
A new Hystrix Dashboard service has been added to the project, providing a web interface to monitor circuit breakers via the /hystrix endpoint at port 6161.
hystrix-dashboard · high confidence
Added Spring Boot application entry point for payment-service
A new Java class, PaymentServiceApplication, was added to the payment-service module. This class serves as the entry point for the Spring Boot application, utilizing the com.timeyang package namespace to initiate the application context.
payment-service · high confidence
Initial configuration for inventory-service
The inventory-service now includes its first set of configuration files, enabling it to connect to a Neo4j database and register with the Eureka service discovery. The setup supports both local development and Docker environments, with specific properties for the Object-Graph Mapping (OGM) driver.
inventory-service/src/main/resources · high confidence
Introduce Edge Service as the unified API gateway
The edge-service module is introduced as the application's API gateway, built on Spring Cloud Netflix Zuul. It provides a unified REST API entry point that routes requests to backend microservices (account, payment, order, etc.) via a reverse proxy. The configuration includes route mappings for various services, OAuth2 resource server authentication, and increased Hystrix/Ribbon timeout settings to prevent failures due to latency.
edge-service · high confidence
Introduce a new Config Service for centralized configuration management
A new Config Service has been added to the project, providing a centralized configuration management solution. The service is implemented as a Spring Boot application that enables the Spring Cloud Config Server, allowing it to serve configuration data from a Git repository (specifically, the 'microservices-event-sourcing' repository). The service is configured to run on port 8888 and is located under the 'com.timeyang' package.
config-service · high confidence
Introduce catalog-service with product and catalog retrieval endpoints
The catalog-service is introduced, providing REST endpoints to retrieve catalog details and individual products. The service integrates with inventory-service via RestTemplate to fetch catalog and product data, with Hystrix circuit breaker protection and configurable timeout settings. The service uses JPA for database operations, with schema and data initialization scripts provided for development.
catalog-service/src · high confidence
Introduce shopping-cart-service with cart management and checkout capabilities
The shopping-cart-service is introduced, providing endpoints to manage a user's shopping cart and process checkouts. The service exposes a REST API (v1) to add or remove items, retrieve the current cart state, and perform a checkout operation that validates inventory and creates an order. The implementation uses event sourcing to aggregate cart events into a shopping cart state, integrates with user, catalog, inventory, and order services via REST templates, and configures JPA repositories for persisting cart events.
shopping-cart-service/src · high confidence
Online store app adds AngularJS frontend with OAuth2 SSO and CSRF protection
The online-store-app introduces a complete AngularJS-based frontend for the online store, featuring routing for home, product, cart, and order pages, along with shared services for catalog, cart, and order management. The application is configured as an OAuth2 SSO client, integrating with a user-service for authentication and implementing CSRF protection via Spring Security's CookieCsrfTokenRepository to support AngularJS's XSRF header requirements. The app also includes static assets, CSS, and JavaScript files for the UI, with configuration in application.yml and bootstrap.yml for Eureka, Hystrix, and Zuul proxy routing.
online-store-app · high confidence
Order service introduces event-driven order state management
The order-service now implements an event-sourced state machine for managing order lifecycle. Orders transition through statuses (PURCHASED, PENDING, CONFIRMED, SHIPPED, DELiverED) based on incoming events (CREATED, ORDERED, SHIPPED, DELIVERED). The service exposes a REST API (OrderControllerV1) to create orders, retrieve order details, and append events. It also supports querying orders by account number and retrieving order events. The implementation includes domain models (Order, OrderEvent, OrderItem), repositories, and a listener for automatic timestamp updates.
order-service · high confidence
User service adds authentication, authorization, and user management capabilities
The user-service now provides a complete authentication and authorization flow using Spring Security and OAuth2.0, including login and authorization pages, static resources, and a REST API for user management. The service exposes endpoints for creating, reading, updating, and deleting users, as well as retrieving the current user's profile. It also configures Redis caching for user data and sets up an in-memory user store for development.
user-service · high confidence
Behavioural changes
Migrate inventory-service to Neo4j and restructure package names
The inventory-service has been refactored to use Neo4j as its primary data store, replacing the previous database configuration. This includes adding a new \GraphConfiguration\ for Neo4j session management, a \Neo4jProperties\ class for connection settings, and new entity classes (\Address\, \Catalog\, \Inventory\, \Product\, \Shipment\, \Warehouse\) with corresponding Spring Data Neo4j repositories. The package structure has been updated to \com.timeyang\ to reflect the domain model changes. Additionally, the \InventoryServiceApplication\ now includes Hystrix support and configures REST API paths for repositories.
inventory-service/src/main/java · high confidence
Dependencies
Initial project structure and dependency configuration for microservices-event-sourcing
The project was restructured and renamed from 'spring-event-sourcing' to 'microservices-event-sourcing', with the group ID updated to 'com.timeyang.onlinestore'. This change introduces Maven (pom.xml) and Gradle (build.gradle) configurations for multiple microservices including account, catalog, config, discovery, edge, inventory, order, payment, shopping cart, and user services. Key dependencies include Spring Boot 1.4.4, Spring Cloud Camden.SR5, and specific library versions such as spring-data-neo4j 4.0.0.RELEASE with forced spring-data-commons 1.11.0.RELEASE to resolve compatibility issues. The build system also includes Docker and publishing configurations.
(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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 35 → 35 (-0.3)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 38 → 34 (-4.4)
- Architecture 100 → 99 (-0.6)
- Maturity 51 → 39 (-12.3)
- Readiness 17 → 23 (+6.0)
- Security 88 → 90 (+2.0)
- Accessibility 52 → 47 (-4.6)
Resolved (12)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Medium: security finding (details withheld)
- No exposed public API
- Scanner failed to run — not a clean result
- Test reliability not included
- The Spring Oauth2.0 section mentions adding @EnableAuthorizationServer but does not show the AuthorizationServerConfig class or its configuration, so a reader cannot verify whether this is actually implemented. (user-service/readme.md)
- dormant codebase — no living knowledge left to concentrate
New (113)
- (anonymous) (cognitive 104) (online-store-app/src/main/resources/static/assets/lib/angular/angular-route.js)
- (anonymous) (cognitive 19) (online-store-app/src/main/resources/static/assets/lib/require.js)
- (anonymous) (cognitive 30) (online-store-app/src/main/resources/static/assets/lib/angular/angular-toaster.js)
- (anonymous) (cognitive 30) (online-store-app/src/main/resources/static/assets/lib/angular/angularAMD.js)
- (anonymous) (cognitive 78) (online-store-app/src/main/resources/static/assets/lib/angular/angular-resource.js)
- (anonymous) (cyclomatic 18) (online-store-app/src/main/resources/static/assets/lib/require.js)
- (anonymous) (cyclomatic 21) (online-store-app/src/main/resources/static/assets/lib/angular/angularAMD.js)
- (anonymous) (cyclomatic 22) (online-store-app/src/main/resources/static/assets/lib/angular/angular-toaster.js)
- (anonymous) (cyclomatic 237) (online-store-app/src/main/resources/static/assets/lib/angular/ng-table.js)
- (anonymous) (cyclomatic 65) (online-store-app/src/main/resources/static/assets/lib/angular/angular-resource.js)
- (anonymous) (cyclomatic 72) (online-store-app/src/main/resources/static/assets/lib/angular/angular-route.js)
- (anonymous)::$StateProvider::$get::transitionTo (cognitive 26) (online-store-app/src/main/resources/static/assets/lib/angular/angular-ui-router.js)
- (anonymous)::$StateProvider::$get::transitionTo (cyclomatic 21) (online-store-app/src/main/resources/static/assets/lib/angular/angular-ui-router.js)
- (anonymous)::$StateProvider::findState (cognitive 26) (online-store-app/src/main/resources/static/assets/lib/angular/angular-ui-router.js)
- (anonymous)::$StateProvider::findState (cyclomatic 17) (online-store-app/src/main/resources/static/assets/lib/angular/angular-ui-router.js)
- (anonymous)::(anonymous)::(anonymous)::NgTableParams::parameters (cognitive 39) (online-store-app/src/main/resources/static/assets/lib/angular/ng-table.js)
- (anonymous)::(anonymous)::(anonymous)::NgTableParams::settings (cognitive 25) (online-store-app/src/main/resources/static/assets/lib/angular/ng-table.js)
- (anonymous)::(anonymous)::(anonymous)::NgTableParams::url (cognitive 19) (online-store-app/src/main/resources/static/assets/lib/angular/ng-table.js)
- (anonymous)::define (cognitive 18) (online-store-app/src/main/resources/static/assets/lib/require.js)
- (anonymous)::format (cognitive 39) (online-store-app/src/main/resources/static/assets/lib/angular/angular-ui-router.js)
- …and 93 more
Architecture
- Containers 0 added · 0 removed · contexts 3 added · 0 removed · edges 2 added · 0 removed
Added bounded contexts (3)
- account-service
- catalog-service
- shopping-cart-service
Added dependency edges (2)
- account-service → shopping-cart-service
- user-service → shopping-cart-service
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
chaokunyang/microservices-event-sourcing 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 ab84eb94c98a56a3ca2ad51c7e9fad90bc3e9832 — 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-90d5d2fe38ee.