idugalic/micro-company
50.0
Weak · 21 September 2026
4k
lines of production code
Java
with JavaScript, TypeScript
4
measurements over time
What this system is
This system is a microservices-based application demonstrating Event Sourcing and CQRS patterns using the Axon Framework and Spring Boot. It provides distinct command-side services for creating and publishing blog posts and managing projects, alongside query-side services that maintain materialized views of that data. The architecture includes supporting infrastructure for service discovery, centralized configuration, and authentication, all containerized for deployment.
Features
Add Docker Compose and Swarm deployment scripts for microservices
Users can now deploy the microservices architecture locally or on AWS using Docker Swarm. The change introduces \docker-compose.yml\ and \docker-compose-v3.yml\ files to define the service topology, a \micro-company.dab\ bundle for Docker application bundles, and shell scripts (\swarm-mode-local.sh\, \swarm-mode-aws.sh\) to automate the creation of Docker machines, initialization of the Swarm cluster, and deployment of the stack. This enables users to spin up the full microservices environment with a single command.
docker · high confidence
Add Spring Boot Admin Server for application monitoring
A new Spring Boot Admin Server has been introduced to provide a centralized dashboard for monitoring and managing the application's health and status. This includes the necessary Java application class with \@EnableAdminServer\, configuration files (\application.yml\, \bootstrap.yml\) to connect to the config server and discovery client, and a Dockerfile based on \eclipse-temurin:11\ to containerize the admin server.
adminserver · high confidence
Add Spring Cloud Config Server for centralized configuration
A new Config Server has been introduced to manage application configuration via a Git repository (micro-company-config), enabling externalized settings for microservices. The server runs on port 8888, is containerized using an Eclipse Temurin 11 base image, and is configured to connect to a specific Git branch (axon3-boot) for configuration data.
configserver · high confidence
Add blog and project management features to the monolithic frontend
The monolithic application's frontend now includes full-featured Angular components for managing blog posts and projects. Users can view, create, and view details for both blog posts and projects, supported by dedicated services, routing, and unit tests. This adds the core content management capabilities to the single-page application.
monolithic/src · high confidence
Add command-side API for creating and publishing blog posts
The command-side-blog module now exposes endpoints to create and publish blog posts. A new BlogController handles POST requests at /blogpostcommands to create a post and at /blogpostcommands/{id}/publishcommand to publish it. These endpoints map to CreateBlogPostCommand and PublishBlogPostCommand respectively, which are handled by the new BlogPostAggregate. The aggregate enforces that only draft posts can be published, throwing a PublishBlogPostException if the post is not in draft status. Validation errors are handled via JSR303 and logged using Logback.
command-side-blog · high confidence
Add documentation module with C4 architecture diagrams
A new documentation module has been introduced to generate and upload C4-style architecture diagrams using Structurizr. The module includes a Spring Boot application that defines a microservices model (including an API gateway, command/query services, and message bus) and generates static context/container views as well as dynamic views for blog and project workflows. The application uploads the resulting workspace to Structurizr, with placeholder API credentials configured in application.properties.
documentation · high confidence
Added Docker and build infrastructure for query-side services
The query-side-blog-service and query-side-project-service now include Dockerfiles that use the eclipse-temurin:11 base image, along with a wait-for-it.sh script to handle service startup dependencies. Each service also received a Maven wrapper (mvnw/mvnw.cmd) and a .mvn/wrapper/maven-wrapper.properties file to standardize the build environment. Additionally, each service was provided with a manifest.yml for PCF Dev deployment, a Spring Boot Application class, and configuration classes for RabbitMQ, security, and cloud profiles, establishing the foundational runtime and build support for these microservices.
query-side-blog-service, query-side-project-service · high confidence
Added Eclipse-based code formatting and import order configurations
Developers can now use the provided Eclipse code formatter and import order files to standardize code style across the project. The \style/mycompany-format.xml\ file defines the formatting rules, while \style/mycompany.importorder\ specifies the import ordering. These files are intended for use with the Eclipse code formatter plugin for IntelliJ IDEA, ensuring consistent code style enforcement.
style · high confidence
Added Eureka registry service with Docker support
The registry module now includes a functional Eureka server implementation, enabling service discovery within the microservices architecture. The change introduces the core Java application class, configuration files (bootstrap.yml, application.yml), and a .gitignore for the registry module. Additionally, Dockerfile and helper scripts (wait-for-it.sh) are added to support containerized deployment, allowing the registry to be built and run as a Docker container.
registry · high confidence
Added Maven wrapper and deployment manifests for command-side services
The command-side-blog-service and command-side-project-service now include Maven wrapper scripts (mvw and mvnw.cmd) and Cloud Foundry deployment manifests (manifest.yml). These additions allow developers to build the services without pre-installing Maven and provide a ready-to-use configuration for deploying to PCF Dev or Pivotal Cloud Foundry, simplifying the local development and deployment workflows.
command-side-blog-service, command-side-project-service · high confidence
Added common base classes for commands and events with audit support
The common module now includes new base classes to support command and event patterns with built-in audit tracking. Specifically, it adds AuditableAbstractCommand and AuditableAbstractEvent, which extend their respective abstract bases to include an AuditEntry (containing 'who' and 'when' details). This allows all commands and events in the system to carry audit information by default.
common · high confidence
Added monolithic application scaffolding and build tooling
The monolithic application now includes the necessary files to build and run the service using Maven. This includes a \.gitignore\ file to exclude the \/data/\ directory, a \README.md\ documenting the deployment as a single monolithic application using Event Sourcing and CQRS, and the standard Maven wrapper scripts (\mvnw\, \mvnw.cmd\) and configuration (\.mvn/wrapper/maven-wrapper.properties\) to manage the Java build environment.
monolithic · high confidence
Added project command-side implementation with Axon 3.0
The command-side-project now includes the full implementation for managing projects using the Axon 3.0 framework. This adds the \ProjectAggregate\ and \ProjectRelease\ domain models, along with \CreateProjectCommand\ and \UpdateProjectCommand\ handlers. A \ProjectController\ exposes REST endpoints at \/projectcommands\ to create and update projects, mapping web requests to Axon commands. The project also includes a \ValidationWsDto\ to handle JSR-303 validation errors and a \logback.xml\ for logging configuration.
command-side-project · high confidence
Added project lifecycle event models and Maven wrapper
Introduced new domain events for project management, specifically ProjectCreatedEvent and ProjectUpdatedEvent, which capture details such as name, repository URL, site URL, category, and description. These events extend the existing AuditableAbstractEvent base class. Additionally, the project now includes the standard Maven wrapper scripts (mvn, mvn.cmd, and maven-wrapper.properties) to ensure consistent build environment setup.
common-project · high confidence
Added query-side project read model and event handling
A new query-side project module was introduced, providing a JPA entity for the Project domain, a Spring Data repository exposing a REST endpoint at /projects, and an Axon event handler that persists ProjectCreatedEvent data into the database.
query-side-project · high confidence
Initial release of the common-blog module
The common-blog module is introduced, providing the foundational structure for blog functionality. This includes the Maven build configuration (mvnw, maven-wrapper.properties), the application properties, and core domain models such as the BlogPostCategory enum. Additionally, new domain events (BlogPostCreatedEvent, BlogPostPublishedEvent) are added to support blog post creation and publication workflows.
common-blog · high confidence
Introduce blog query-side with JPA entity, event handler, and read-only repository
The query-side-blog module now provides the read-side infrastructure for blog posts. A new JPA entity, BlogPost, is mapped to the database, and a corresponding read-only Spring Data JPA repository exposes query methods for retrieving blog posts by draft status, category, publication date, and author. An event handler listens for BlogPostCreatedEvent and BlogPostPublishedEvent to keep the materialized view in sync. The module also includes standard Maven wrapper scripts and a basic Logback configuration.
query-side-blog · high confidence
Introduce circuit-breaker service with Hystrix dashboard and Docker support
A new circuit-breaker service is added, featuring a Spring Boot application with the Hystrix dashboard enabled for monitoring. The service includes a Dockerfile based on Eclipse Temurin 11 and a wait-for-it script to handle service dependencies during container startup. Configuration is managed via bootstrap.yml, which sets the application name and connects to a config server, with specific settings for Docker environments.
circuit-breaker · high confidence
Introduction of a new OAuth2 Authorization Server
A new authorization server component has been added to the platform, providing OAuth2 endpoints for token acquisition, user authorization, and token validation. The server is configured with in-memory user credentials and client definitions, and includes a custom login and approval UI templates. It is also prepared for containerized deployment via a new Dockerfile and supporting scripts.
authserver · high confidence
New API Gateway with WebSocket event streaming
A new API Gateway service has been introduced to act as a central entry point for client applications. It is configured to listen to all system events via RabbitMQ and proxies them to connected clients using a WebSocket-based interface (exposed at /company). A demo HTML page is included to test the live event streaming on /static/socket/index.html.
api-gateway · high confidence
Behavioural changes
Add exception handling and Axon 3.0 configuration
The command-side-project-service now includes a new exception handler that maps Axon 3.0-specific exceptions (such as CommandExecutionException and JSR303ViolationException) to appropriate HTTP status codes, ensuring consistent error responses for clients. Additionally, the service is configured to use Axon 3.0, featuring a BeanValidationInterceptor on the command bus and updated Spring Boot application entry points.
command-side-project-service/src/main/java · high confidence
Dockerfiles updated to use Eclipse Temurin 11 and include wait-for-it.sh helper
The Dockerfiles for the command-side-blog-service and command-side-project-service have been updated to use the eclipse-temurin:11 base image, replacing the previous Java 8/8-based images. Both services now include a wait-for-it.sh script in their Docker images, which allows the application to wait for dependent services to become available before starting, improving container startup reliability.
command-side-blog-service/src/main/docker, command-side-project-service/src/main/docker · high confidence
Maven wrapper configuration added
The project now includes a Maven wrapper configuration file (.mvn/wrapper/maven-wrapper.properties) that specifies the use of Apache Maven 3.3.3. This ensures that all users and build environments use the same version of Maven, improving build consistency and reproducibility.
.mvn · high confidence
Project documentation and repository configuration updated
The repository now includes a Code of Conduct, an Apache 2.0 license file, and a Jekyll minimal theme configuration for GitHub Pages. Documentation has been significantly expanded to cover cloud-native architecture, Spring Cloud, and Axon Framework 3.0, with a new table of contents. Repository settings are configured to treat static assets as vendored, and a Maven wrapper script is added to ensure consistent builds.
(repo-wide) · high confidence
Refactored application entry point and added comprehensive exception handling for Axon commands
The application entry point (Application.java) was restructured to use Spring Boot's standard main method and environment logging. A new global exception handler (RestResponseEntityExceptionHandler) was introduced to standardize error responses for Axon command execution failures, validation errors (JSR303), and data access issues. Additionally, Axon framework configuration was updated to include a BeanValidationInterceptor on the command bus, ensuring that command validation errors are caught and handled consistently.
command-side-blog-service/src/main/java · medium confidence
Standardized Maven wrapper configuration for command-side services
The Maven wrapper configuration for the command-side-blog-service and command-side-project-service has been standardized to use Apache Maven 3.3.3. This ensures consistent build environments across these services.
command-side-blog-service/.mvn, command-side-project-service/.mvn · medium confidence
Dependencies
Initial Maven project structure with Spring Boot, Axon, and Docker support
The project is initialized with a multi-module Maven structure, establishing a parent POM that defines versions for Spring Boot 1.5.22, Spring Cloud Dalston, and Axon Framework 3.4.4. This change introduces the foundational build configuration, including Docker image building via the Spotify docker-maven-plugin, and sets up the core microservices architecture with modules for command/query sides, authentication, configuration, and a monolithic fallback. Additionally, an Angular 2.2.1 frontend is added to the monolithic module.
(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 54 → 50 (-3.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 92 → 89 (-2.5)
- Architecture 100 → 86 (-13.7)
- Maturity 52 → 52 (+0.0)
- Readiness 46 → 40 (-6.2)
- Security 74 → 68 (-5.9)
- Domain Modelling 100 → 66 (-33.5)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 48 → 54 (+5.5)
Resolved (49)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/Application.java)
- Duplicated block (11 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
- Duplicated block (12 lines × 3) (api-gateway/src/main/java/com/idugalic/apigateway/Application.java)
- Duplicated block (5 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
- Duplicated block (6 lines × 2) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (6 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/aggregate/BlogPostAggregate.java)
- High: security finding (details withheld)
- High: security finding (details withheld)
- LLM evaluation failed
- Low IaC: DS-0005 (adminserver/src/main/docker/Dockerfile)
- Low IaC: DS-0005 (api-gateway/src/main/docker/Dockerfile)
- Low IaC: DS-0005 (authserver/src/main/docker/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (adminserver/src/main/docker/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (api-gateway/src/main/docker/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (authserver/src/main/docker/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (circuit-breaker/src/main/docker/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (command-side-blog-service/src/main/docker/Dockerfile)
- Medium IaC: CKV_DOCKER_3 (command-side-project-service/src/main/docker/Dockerfile)
- …and 29 more
New (113)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Duplicated block (11 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/Application.java)
- Duplicated block (12 lines × 3) (api-gateway/src/main/java/com/idugalic/apigateway/Application.java)
- Duplicated block (15 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/web/ValidationWsDto.java)
- Duplicated block (16 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
- Duplicated block (27 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/configuration/AxonConfiguration.java)
- Duplicated block (45 lines × 2) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/configuration/RabbitConfiguration.java)
- Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (5 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (5 lines × 6) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (6 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/aggregate/BlogPostAggregate.java)
- Duplicated block (6 lines × 2) (command-side-blog/src/main/java/com/idugalic/commandside/blog/web/BlogController.java)
- Duplicated block (6 lines × 2) (documentation/src/main/java/com/idugalic/documentation/DocumentationApplication.java)
- Duplicated block (6 lines × 3) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (7 lines × 2) (command-side-blog-service/src/main/java/com/idugalic/commandside/blog/RestResponseEntityExceptionHandler.java)
- Duplicated block (82 lines × 2) (query-side-blog-service/src/main/java/com/idugalic/queryside/blog/configuration/RabbitConfiguration.java)
- High IaC: WD-COMPOSE-0002 (docker/docker-compose-monolithic.yml)
- High IaC: WD-COMPOSE-0002 (docker/docker-compose-v3.yml)
- …and 93 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
idugalic/micro-company 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 9102aa048fb5246d87d1d116c7fcd2dd8fa0a926 — 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.