brunotacca/poc_cleanarch_spring_multimodule
57.1
Adequate · 21 September 2026
1.2k
lines of production code
Java
primary language
4
measurements over time
What this system is
This system is a Spring Boot application structured as a multi-module Maven project implementing Clean Architecture. It provides a RESTful API for managing customer data, featuring full CRUD operations, activation/deactivation logic, and HATEOAS hypermedia links. The architecture separates concerns into domain entities, use cases, and external adapters, supported by JPA data access and PostgreSQL storage.
Features
Added API documentation and build infrastructure to the external modules
The \ca-spring-multimodule/external\ area now includes generated Markdown and HTML API guides for the \apis\ module, providing users with reference documentation for HTTP verbs, status codes, hypermedia links, and specific endpoints like the customer service. Additionally, \.gitignore\ files and Maven wrapper scripts (\mvw\, \mvnw.cmd\) have been added to the \apis\, \datasources\, and root \external\ directories to standardize the build environment and exclude IDE/build artifacts.
ca-spring-multimodule/external · high confidence
Added Customer domain entities and shared validation infrastructure
Introduced the core domain model for the Customer aggregate, including the Customer interface, DefaultCustomer implementation, and a CustomerFactory for object creation. The Address value object and its validation logic were also added. To support these entities, shared infrastructure was introduced: a BusinessException hierarchy (including RequiredFieldException), base interfaces for entities and value objects, and utility classes for validation.
ca-spring-multimodule/domain/entities/src/main · high confidence
Added Docker Compose for PostgreSQL and pgAdmin, plus Maven wrapper and build config
The project now includes a docker-compose.yml file that runs a local PostgreSQL 15 container (database caspringmultimodule) and a pgAdmin 4 instance for database management, enabling local development and testing of the Spring Boot application's database interactions. Additionally, Maven wrapper scripts (mvn/mvnw) and configuration files (.gitignore, lombok.config) were added to standardize the build environment and IDE settings.
ca-spring-multimodule · high confidence
Added Maven wrapper scripts and gitignore templates to adapter and domain modules
The adapter and domain modules now include Maven wrapper scripts (mvw and mvnw.cmd) and .gitignore templates for each subdirectory (controllers, entities, usecases). This allows developers to build the project using the project's specific Maven version without requiring a global Maven installation, and ensures IDE and build artifacts are ignored.
ca-spring-multimodule/adapter, ca-spring-multimodule/domain · high confidence
Added customer data access layer with JPA entities and repository
The external/datasources module now includes the full implementation for customer data access, featuring JPA entities (CustomerJpaEntity, AddressJpaEntity), a repository interface, and a service implementation that maps between domain models and database entities. The change also introduces a Flyway migration script to create the customer table, configuration classes for JPA and domain beans, and comprehensive unit and integration tests using Testcontainers for the PostgreSQL database.
ca-spring-multimodule/external/datasources · high confidence
Introduce CustomerDataAccess interface for customer data operations
A new CustomerDataAccess interface has been added to define the data access layer for customer entities. This interface specifies methods for creating, reading, updating, and finding customers by name or email, establishing the contract for customer data operations within the domain use cases.
ca-spring-multimodule/domain/usecases/src/main/java/com/brunotacca/domain/usecases/dataaccess · high confidence
Introduce customer API with HATEOAS hypermedia links
The external APIs module now exposes a full RESTful interface for managing customers, including create, read, update, activate, and deactivate operations. The implementation introduces a new \CustomersRestController\ that maps HTTP requests to domain use cases, utilizing a \CustomerModelMapper\ for data transfer. Hypermedia support is enabled via \HypermediaConfiguration\ (HAL+JSON), and all customer-related responses include discoverable links generated by \CustomerLinkDiscoverabilityFactory\, allowing clients to navigate the API through embedded links rather than hardcoded URLs.
ca-spring-multimodule/external/apis/src/main/java/com/brunotacca/external/apis · high confidence
Introduce customer domain use cases and supporting infrastructure
Added a new set of customer use cases including Create, Update, Find by Name, Get by ID, Activate, and Deactivate, along with the associated DTOs, mappers, and exception classes. A factory (CustomerUseCaseFactory) is provided to wire these use cases, establishing the core domain logic for customer management.
ca-spring-multimodule/domain/usecases/src/main/java/com/brunotacca/domain/usecases/customer · high confidence
New CustomerController and associated tests
A new CustomerController has been added to the application, exposing endpoints for creating, updating, finding, and activating/deactivating customers. The controller delegates to corresponding use cases via a factory. Alongside the controller, a custom JUnit 5 display name generator and a comprehensive test suite for the CustomerController have been introduced to verify the controller's interaction with the domain layer.
ca-spring-multimodule/adapter/controllers · high confidence
Behavioural changes
Updated project documentation and metadata
The repository's documentation and metadata have been updated to reflect the actual project identity and structure. The README now explicitly describes the project as a 'POC SpringBoot CleanArchitecture with Maven Multimodule' implementation, replacing generic placeholders with specific details about the architecture, technologies (Spring, Maven, H2, Postgres, TestContainers), and quality tools (SonarQube, GitHub Actions). Additionally, the CHANGELOG link was corrected to point to the actual repository URL, and the CITATION file was updated with the correct title and repository URL.
(repo-wide) · high confidence
Test coverage
Added custom JUnit 5 display name generator for test output; Added custom JUnit 5 display name generators for test output formatting; Added tests for customer domain entities and shared utilities; Added tests for the customer REST API layer; Added unit and integration tests for customer use cases.
Dependencies
Maven multi-module structure with coverage and testing dependencies
The project has been restructured into a Maven multi-module build with new \pom.xml\ files defining modules for domain (entities, usecases), adapters (controllers), and external layers (APIs, datasources). This setup introduces testing and coverage tooling, including JaCoCo for code coverage, Mockito and JUnit for unit tests, and Testcontainers for integration testing. The root \pom.xml\ also configures SonarCloud integration and enforces Java 17.
(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 53 → 57 (+3.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 99 → 100 (+0.3)
- Architecture 100 → 96 (-4.1)
- Maturity 51 → 51 (+0.0)
- Readiness 35 → 38 (+2.8)
- Security 68 → 88 (+20.7)
- Domain Modelling 100 → 100 (+0.0)
Resolved (15)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (11 lines × 2) (ca-spring-multimodule/domain/usecases/src/main/java/com/brunotacca/domain/usecases/customer/ActivateCustomerUseCase.java)
- Duplicated block (7 lines × 2) (ca-spring-multimodule/external/apis/src/main/java/com/brunotacca/external/apis/rest/customers/CustomersRestController.java)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Scanner failed to run — not a clean result
- Test reliability not included
- The README links to CODE_OF_CONDUCT.md for the Code of Conduct, but no link or description is given in the SUPPORT.md doc itself for how to reach out when a question is outside the project scope and not yet an issue. (docs/SUPPORT.md)
- single-maintainer — knowledge-concentration (bus factor) risk
New (35)
- Coverage not measured — no coverage collector is wired up
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no licence statement (README.md)
- Duplicated block (7 lines × 2) (ca-spring-multimodule/external/apis/src/main/java/com/brunotacca/external/apis/rest/customers/CustomersRestController.java)
- Duplicated block (9 lines × 2) (ca-spring-multimodule/domain/usecases/src/main/java/com/brunotacca/domain/usecases/customer/ActivateCustomerUseCase.java)
- High IaC: WD-COMPOSE-0002 (ca-spring-multimodule/docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (ca-spring-multimodule/docker-compose.yml)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No assertions: indexExample (ca-spring-multimodule/external/apis/src/test/java/com/brunotacca/external/apis/rest/IndexControllerIT.java)
- No assertions: shouldActivateCustomerAndReturn200 (ca-spring-multimodule/external/apis/src/test/java/com/brunotacca/external/apis/rest/customers/CustomerRestControllerIT.java)
- No assertions: shouldCreateCustomerAndReturn201 (ca-spring-multimodule/external/apis/src/test/java/com/brunotacca/external/apis/rest/customers/CustomerRestControllerIT.java)
- …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
brunotacca/poc_cleanarch_spring_multimodule 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 21 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 779fc8a9491ccb7b86986bc4817a734756054830 — 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-fa71c66cabd8.