fabwu/dddinaction
52.1
Adequate · 20 September 2026
1.5k
lines of production code
PHP
primary language
4
measurements over time
What this system is
This system is a Symfony-based web application that simulates the financial operations of an ATM and snack machine network. It models core domain entities such as ATMs, head office accounts, and snack machines, handling cash loading, unloading, and snack purchases with precise money arithmetic. The application provides a web interface for users to interact with machines and for administrators to manage cash balances across the network, backed by Doctrine ORM for persistence and a domain event system for synchronization.
Features
Added Bootstrap v4.0.0 styling framework
The application now includes the Bootstrap v4.0.0 CSS framework, providing a comprehensive set of responsive grid layouts, form controls, button styles, and utility classes. This enables consistent, mobile-first styling across the user interface components.
public · high confidence
Added Symfony console application entry point
A new \bin/console\ script has been added to the project, serving as the command-line entry point for the Symfony application. This file bootstraps the kernel, handles environment variable loading via Dotenv, manages debug mode settings, and initializes the Symfony Console Application to execute commands.
bin · high confidence
Initial Symfony application configuration and dependency injection setup
The application now includes the core Symfony framework bundles (Framework, Twig, Doctrine, Migrations) and configures the service container to support a layered architecture. Dependency injection is set up to map domain repositories (SnackMachine, Snack, Atm, HeadOffice) and the PaymentGateway to their respective Doctrine infrastructure implementations, enabling the underlying domain logic and persistence layers to function.
config · high confidence
Initial UI for ATM, Head Office, and Snack Machine interactions
Added Twig templates that provide the user interface for the application's core bounded contexts. The ATM view displays current money inside and charged amounts, allowing users to withdraw cash. The Head Office dashboard provides an overview of all snack machines and ATMs, enabling administrators to view details and perform cash loading or unloading operations. The Snack Machine interface allows users to insert various denominations of money, purchase specific snacks, and return funds. A base layout template standardizes the page structure across these views.
templates · high confidence
Initial application kernel setup with domain event handling
The application now includes a Symfony Kernel class that bootstraps the framework, registers bundles, and configures service containers and routes. A key addition is the integration of a \DomainHandlerCompilerPass\ during the build phase, which enables the automatic handling of domain events within the application's architecture.
src · high confidence
Introduce Snack Machine domain model with money management capabilities
This change introduces the core domain entities for the Snack Machine bounded context, including the SnackMachine aggregate root, Slot, Snack, and SnackPile value objects. Users can now interact with a snack machine that supports inserting money, buying snacks with change calculation, loading inventory, and critically, unloading the collected money from the machine's internal cash box. The implementation includes the necessary repositories and DTOs to persist and retrieve machine state.
src/Domain/SnackMachine · high confidence
Introduce UI controllers for ATM, Head Office, and Snack Machine interactions
New Symfony controllers have been added to expose the core domain capabilities through a web interface. The ATM controller allows users to view ATM status and withdraw cash via a payment gateway. The Head Office controller provides an overview dashboard and enables cash management actions, specifically loading cash to ATMs and unloading cash from snack machines. The Snack Machine controller implements the user-facing workflow for inserting specific coin/bill denominations, purchasing snacks, and returning money.
src/UI · high confidence
Introduce core domain infrastructure and value objects
This change establishes the foundational building blocks for the application's domain layer. It adds a common infrastructure set including an Entity base class with Doctrine ORM mapping, an AggregateRoot class that manages domain events, a DomainEvent interface, and a Handler abstract class for event processing. Additionally, it introduces a ValueObject abstract class and a concrete Money value object that models currency using specific coin and bill counts, providing arithmetic operations and formatting utilities.
src/Domain/Common · high confidence
Introduce head office entity and balance synchronization
Added a new HeadOffice domain entity to track financial balance and physical cash, along with a repository interface for persistence. A new event handler automatically updates the head office's balance whenever an ATM balance changes, ensuring financial records stay synchronized across the system.
src/Domain/Management · high confidence
Introduction of ATM domain model and infrastructure contracts
This change introduces the core domain logic for the ATM feature, including the \Atm\ entity which manages cash balances, calculates transaction commissions, and raises domain events upon balance changes. It also adds the \AtmRepository\ interface for data persistence, a \PaymentGateway\ interface for handling external payment processing, and supporting DTOs and event classes to facilitate communication within the system.
src/Domain/Atm · high confidence
Introduction of Infrastructure Layer with Doctrine Persistence and Domain Event Dispatching
This change establishes the application's infrastructure layer, introducing Doctrine ORM as the persistence mechanism for domain entities (ATM, Head Office, Snack Machine, Snack, Slot) via new repository implementations and database migrations. It also adds a Domain Event Dispatcher to handle asynchronous processing of domain events triggered by entity lifecycle changes, alongside a stub for a payment gateway.
src/Infrastructure · high confidence
Test coverage
Added integration tests for repository connectivity and reference data; Added unit tests for domain entities.
Dependencies
Migrate to Symfony 4 and update project metadata
The project has been restructured to use the Symfony 4 framework ecosystem, adding dependencies for the framework bundle, console, Twig, ORM, and YAML parsing, alongside development tools like PHPUnit 6.5 and the Maker bundle. The package name was changed from 'fabwu/domain-driven-design-in-practice' to 'fabwu/dddinaction', the license was updated to MIT, and the minimum PHP version requirement was set to 7.1.3. Configuration changes include enabling package sorting, defining auto-scripts for cache clearing and asset installation, and adding conflicts with the full Symfony monolith to ensure compatibility with the component-based approach.
(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 60 → 52 (-7.7)
- Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (-0.1)
- Architecture 69 → 69 (+0.0)
- Maturity 55 → 55 (+0.0)
- Readiness 50 → 61 (+11.1)
- Security 95 → 67 (-27.5)
- Accessibility 41 (new)
Resolved (7)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- Duplicated block (10 lines × 2) (src/UI/SnackMachineController.php)
- No exposed public API
- Test reliability not included
- early-stage repository — too little history to judge knowledge freshness
- single-maintainer — knowledge-concentration (bus factor) risk
New (35)
- Abandoned package: sensio/framework-extra-bundle
- Critical CVE: [GHSA redacted] (composer.lock)
- Critical CVE: [GHSA redacted] (composer.lock)
- Critical CVE: [GHSA redacted] (composer.lock)
- Critical CVE: [GHSA redacted] (composer.lock)
- Critical CVE: [GHSA redacted] (composer.lock)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (9 lines × 2) (src/UI/SnackMachineController.php)
- End-of-life framework: Symfony 4
- High CVE: [GHSA redacted] (composer.lock)
- High CVE: [GHSA redacted] (composer.lock)
- Low CVE: [GHSA redacted] (composer.lock)
- Medium CVE: [GHSA redacted] (composer.lock)
- Medium CVE: [GHSA redacted] (composer.lock)
- Medium CVE: [GHSA redacted] (composer.lock)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- …and 15 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
fabwu/dddinaction 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 20 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 5bfae3968fe1d8fe11683351b6783009350d8308 — 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.