aalhour/digital-restaurant
43.6
Weak · 22 September 2026
6.8k
lines of production code
Kotlin
with JavaScript
6
measurements over time
What this system is
This system is a distributed restaurant management platform that implements a domain-driven design using the Axon Framework for event sourcing and CQRS. It provides both monolithic and microservice architectures, featuring distinct command-side services for courier, customer, order, and restaurant domains. The system handles complex business workflows, such as order validation and delivery tracking, while supporting real-time updates via WebSockets and asynchronous communication through message brokers like RabbitMQ and Kafka.
Features
Add microservices for courier, customer, and order domains with Axon and RabbitMQ integration
This change introduces three new microservices—Courier, Customer, and Order—each configured to communicate via RabbitMQ using the Axon Framework. Each service includes configuration for AMQP message sources, Spring Cloud Eureka discovery client, and REST controllers for handling commands. The services also expose query models via Spring Data REST repositories and implement event handlers that update read models based on domain events. Configuration files set up H2 in-memory databases for development, H2 console access, and Axon snapshot thresholds.
(repo-wide) · high confidence
Add query-side microservice for event-driven data projection
The drestaurant-microservices-query service is introduced to handle read-model projections using the Axon Framework. It subscribes to domain events (Courier, Customer, Order, Restaurant) via Kafka, persists the data in an H2 database, and exposes the repositories via Spring Data REST at /api/query. The service also configures WebSocket (STOMP) for real-time updates and sets up CORS headers to support the frontend.
drestaurant-apps/drestaurant-microservices/drestaurant-microservices-query · high confidence
Added Eureka-based service discovery server
A new discovery server has been introduced to the microservices architecture, enabling service registration and discovery via Spring Cloud Netflix Eureka. The server is configured to run on port 8761, allowing other microservices to register themselves and discover each other within the distributed system.
drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-discovery-server, drestaurant-apps/drestaurant-microservices/drestaurant-microservices-discovery-server · high confidence
Adds Axon-based event sourcing and CQRS query side for the monolith
The monolith now includes a full CQRS and event sourcing stack using the Axon Framework. This introduces read-model entities (e.g., CourierEntity, OrderEntity) and Spring Data JPA repositories for each aggregate, along with event handlers that project domain events into these read models. Query handlers expose these repositories via Spring Data REST endpoints, and an admin controller provides endpoints to inspect and reset event processors, enabling features like blue-green deployments by checking processor status.
drestaurant-apps/drestaurant-monolith-rest · high confidence
Courier and CourierOrder aggregates with Axon event sourcing
The courier bounded context now implements domain logic for managing courier entities and their associated orders using Axon Framework's event sourcing. The Courier aggregate handles creation and order validation, while the CourierOrder aggregate manages the lifecycle of orders (creation, assignment, delivery) and coordinates with the Courier aggregate via a CourierOrderSaga. Internal commands and events are scoped to the courier context, and snapshotting is configured for both aggregates.
drestaurant-libs/drestaurant-courier · high confidence
Customer and CustomerOrder aggregates with order validation saga
The drestaurant-customer module now implements the Customer and CustomerOrder aggregates using Axon's event sourcing, allowing customers to be created and orders to be tracked through states (pending, created, rejected, delivered). A CustomerOrderSaga coordinates the order validation process: when a new order is initiated, the saga triggers a validation command; if the order is valid, the order is marked as created, otherwise it is rejected. Internal commands and events handle the validation results, and Spring configuration wires up the necessary beans and snapshot triggers.
drestaurant-libs/drestaurant-customer · high confidence
Initial project scaffolding and documentation
The repository was initialized with core configuration files including a .gitignore, a .travis.yml for Java 8 CI, and a Maven wrapper (mvnw) for consistent builds. Documentation was added via a PITCHME.md presentation and a comprehensive README.md detailing the application's domain layer, event sourcing patterns, and instructions for running the monolithic and microservice variants.
(repo-wide) · high confidence
Initial release of the Drestaurant Monolith application
The application is now available as a single monolithic deployment, exposing a static landing page that describes the use of Event Sourcing and CQRS. Configuration for Spring Data REST, an in-memory H2 database, and Axon event processing with snapshotting thresholds for all aggregates (customer, restaurant, order, courier) has been added.
drestaurant-apps/drestaurant-monolith/src/main/resources · high confidence
Introduce command-side microservice for courier operations
Added a new Spring Boot application for courier command handling, exposing a REST API at /api/command/courier to create couriers, assign orders, and mark deliveries. The service is configured with Axon Framework for event sourcing and CQRS, using Kafka for event streaming and Spring Cloud for service discovery.
drestaurant-apps/drestaurant-microservices/drestaurant-microservices-command-courier · high confidence
Introduce command-side microservices for Customer, Order, and Restaurant domains
New Spring Boot microservices are added for the command side of the Drestaurant application, each exposing REST endpoints to handle domain-specific commands (CreateCustomer, CreateOrder, CreateRestaurant, and MarkRestaurantOrderAsPrepared). Each service is configured with Axon Framework for CQRS/event sourcing, integrates with Kafka for event publishing/consumption, registers with Spring Cloud Eureka for service discovery, and applies a global CORS filter to allow cross-origin requests.
drestaurant-apps/drestaurant-microservices/drestaurant-microservices-command-customer, drestaurant-apps/drestaurant-microservices/drestaurant-microservices-command-order, drestaurant-apps/drestaurant-microservices/drestaurant-microservices-command-restaurant · high confidence
Introduce event-driven architecture with Axon and real-time updates
The monolith now implements an event-sourcing architecture using Axon Framework, featuring event handlers for Courier, Customer, Order, and Restaurant entities that update read-model repositories and broadcast updates via WebSocket. Configuration classes define the Axon setup, including saga tracking processors and command interceptors. An administrative API endpoint has been added to manage event processor status and reset tokens, while REST controllers expose command endpoints for creating and updating entities. Additionally, CORS, WebSocket, and Swagger configurations are introduced to support the new communication patterns.
drestaurant-apps/drestaurant-monolith/src/main/kotlin · high confidence
Introduced courier and customer domain models and public API contracts
Added new Kotlin files defining the public command and event interfaces for the courier and customer domains. Specifically, the courier module now exposes commands for creating and assigning orders, and events for tracking order states (created, assigned, delivered, not assigned). The customer module similarly exposes commands for creating customers and orders, along with corresponding lifecycle events. Additionally, new enum types define the state machines for courier orders (e.g., PENDING, ASSIGNED, DELIVERED) and customer orders (e.g., CREATED, REJECTED, DELiverED), establishing the core domain vocabulary for these services.
drestaurant-libs/drestaurant-common/src/main/kotlin/com/drestaurant/courier · high confidence
Introduces domain models and events for restaurant orders
The system now supports creating and tracking restaurant orders. New domain models including RestaurantMenu, MenuItem, RestaurantOrderDetails, and RestaurantOrderLineItem define the structure of orders and menus. Corresponding events (RestaurantOrderCreatedEvent, RestaurantOrderPreparedEvent, etc.) and commands (CreateRestaurantOrderCommand) are added to the public API, enabling the handling of order lifecycle states such as CREATED, PREPARED, and REJECTED.
drestaurant-libs/drestaurant-common/src/main/kotlin/com/drestaurant/restaurant · high confidence
Introduces order domain models and event structures
Adds new domain models and event structures for the order subdomain, including the OrderState enum, OrderInfo, OrderDetails, and OrderLineItem classes, alongside command and event definitions (CreateOrderCommand, OrderCreationInitiatedEvent, etc.) that support the order lifecycle.
drestaurant-libs/drestaurant-common/src/main/kotlin/com/drestaurant/order · high confidence
New microservices sample with WebSockets, AxonHub and AxonDB
A new microservices sample is added, providing command-side implementations for courier, customer, order, and restaurant domains. Each service exposes WebSocket endpoints (STOMP over SockJS) for real-time communication, integrates with Axon Framework for command handling and saga management, and connects to AxonHub. The sample includes configuration for CORS, message brokers, and Axon snapshotting, along with simple HTML/JS clients for each domain.
(repo-wide) · high confidence
Restaurant order validation and lifecycle management via Axon framework
The restaurant bounded context now implements full order processing workflows using the Axon framework. This includes a Restaurant aggregate that validates orders against the menu and publishes internal events, a RestaurantOrder aggregate that manages order states (creation, rejection, preparation), and a RestaurantOrderSaga that orchestrates the validation flow by reacting to internal events and dispatching commands. The implementation is supported by corresponding unit tests for the aggregates and the saga.
drestaurant-libs/drestaurant-restaurant · medium confidence
Behavioural changes
Order domain logic migrated to Kotlin with Axon framework integration
The order domain has been implemented in Kotlin, introducing an Order aggregate root that manages order state transitions (creation, verification, preparation, delivery, and rejection) using Axon's event sourcing and command handling. A new OrderSaga coordinates the multi-step business process across customer, restaurant, and courier subdomains, while internal commands and a Spring configuration for event snapshotting have been added to support the new architecture.
drestaurant-libs/drestaurant-order/src/main/kotlin · medium confidence
Test coverage
Added unit tests for the Order aggregate and saga
Added new test files, OrderAggregateTest and OrderSagaTest, which verify the behavior of the Order aggregate and the OrderSaga workflow. The tests cover the full lifecycle of an order, including creation, verification by customer and restaurant, preparation, delivery, and rejection scenarios.
drestaurant-libs/drestaurant-order/src/test · high confidence
Dependencies
New microservices and monolith application templates
Added new sample applications for building microservices and monolithic architectures using Spring Boot and Axon Framework. The update introduces REST-based microservices (including a discovery server and command/query services for customer, order, and restaurant domains) and a monolithic REST application. The microservices configuration includes dependencies for RabbitMQ (AMQP), Spring Cloud Eureka for service discovery, and Axon's distributed command bus, while the websockets variant adds real-time communication capabilities.
(dependencies) · medium confidence
Housekeeping
Initial project configuration and build setup
The project is initialized with Maven build configuration, including a settings file that defines server credentials for the 'idugalic' repository (both releases and snapshots) using environment variables for passwords. Additionally, the Maven wrapper is configured to use version 3.3.9, and empty application.properties files are added to the common and order modules.
.mvn, drestaurant-libs/drestaurant-common/src/main/resources, drestaurant-libs/drestaurant-order/src/main/resources · 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 49 → 44 (-5.7)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 95 → 96 (+0.3)
- Architecture 100 → 78 (-21.9)
- Maturity 39 → 51 (+12.3)
- Readiness 39 → 27 (-12.3)
- Security 100 → 98 (-2.2)
- Domain Modelling 100 → 87 (-13.4)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 47 → 44 (-2.9)
Resolved (16)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (14 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (15 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (16 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (5 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/web/CommandController.kt)
- Duplicated block (5 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/web/CommandController.kt)
- Duplicated block (6 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (7 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-restaurant/src/main/kotlin/com/drestaurant/query/handler/RestaurantHandler.kt)
- Duplicated block (7 lines × 5) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/web/CommandController.kt)
- LLM evaluation failed
- No exposed public API
- Scanner failed to run — not a clean result
- Test reliability not included
- complexity unreadable for .java, .kt — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (68)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (drestaurant-apps/drestaurant-microservices-websockets/drestaurant-microservices-websockets-query/src/main/kotlin/com/drestaurant/query/handler/RestaurantOrderHandler.kt)
- Duplicated block (11 lines × 2) (drestaurant-apps/drestaurant-microservices-websockets/drestaurant-microservices-websockets-query/src/main/kotlin/com/drestaurant/query/handler/CourierHandler.kt)
- Duplicated block (17 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/query/handler/CourierHandler.kt)
- Duplicated block (17 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/query/handler/CourierOrderHandler.kt)
- Duplicated block (17 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-customer/src/main/kotlin/com/drestaurant/query/handler/CustomerHandler.kt)
- Duplicated block (17 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (17 lines × 2) (drestaurant-apps/drestaurant-monolith-rest/src/main/kotlin/com/drestaurant/admin/AxonAdministration.kt)
- Duplicated block (17 lines × 2) (drestaurant-apps/drestaurant-monolith-rest/src/main/kotlin/com/drestaurant/configuration/AxonConfiguration.kt)
- Duplicated block (18 lines × 17) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/configuration/MyCorsFilter.kt)
- Duplicated block (18 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-courier/src/main/kotlin/com/drestaurant/query/handler/CourierOrderHandler.kt)
- Duplicated block (18 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (18 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (18 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- Duplicated block (18 lines × 2) (drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-order/src/main/kotlin/com/drestaurant/query/handler/OrderHandler.kt)
- …and 48 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
aalhour/digital-restaurant 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 5e6eb4370f120009a85853433030e8cc33a65d00 — 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.