djarza/football-events
49.7
Weak · 21 September 2026
2.4k
lines of production code
Java
primary language
4
measurements over time
What this system is
Features
Add StateStoreRepository for Kafka Streams state store access
A new StateStoreRepository class has been introduced in the football-common module to provide a typed, reactive interface for accessing Kafka Streams state stores. This repository allows querying individual records by ID and retrieving all records as a reactive Flux stream, enabling consumers to interact with the underlying Kafka state stores in a more structured and functional manner.
football-common/src/main/java/org/djar/football/repo · high confidence
Introduce basic football statistics view with new port and configuration
The football-view-basic module now provides a basic statistics view, exposing the application on port 18083 and configuring Kafka connectivity. The core logic is implemented in StatisticsBuilder, which processes match, goal, and card events to compute and publish team rankings, match scores, and player statistics. The entry point is BasicViewApplication, and the service is configured via application.yml with updated Kafka bootstrap addresses and timeouts.
football-view-basic · high confidence
Introduce match command API and domain model
The football-match service now exposes a REST API for managing match states and scoring. Users can schedule matches, start or finish them, and submit goals or cards via the new MatchCommandController. The domain model includes Match, Player, and Card entities, with state transitions enforced (e.g., starting a scheduled match). The service also persists match data via Kafka Streams, updating a local state store. Error handling is improved with specific exceptions for not-found and invalid content scenarios.
football-match/src · high confidence
Introduce player domain and snapshotting logic
The football-player service now includes a new PlayerCommandConnector that ingests player data from the 'fb-connect.public.players' Kafka topic, filtering for create and snapshot operations to emit PlayerStartedCareer events. A DomainUpdater component initializes a 'player\_store' to maintain a snapshot of player entities (id and name) derived from these events. The application entry point has been renamed to PlayerApplication, and the domain classes (Player, Club) have been moved to the player package. Tests have been updated to verify the new snapshotting behavior.
football-player/src · high confidence
Introduce web dashboard for live football statistics
A new web dashboard is now available to view real-time football statistics. The UI module processes live data via Kafka Streams and exposes endpoints for match scores, team rankings, player goals, and player cards. These statistics are pushed to the dashboard in real-time via WebSocket connections, allowing users to monitor live game data as it updates.
football-ui/src/main/java · medium confidence
Introduce web dashboard with live updates
A new web dashboard is introduced, providing a live-updating interface that displays real-time match scores, top 10 scorers, team rankings, and player cards via WebSocket connections. The application's configuration has been updated to run on port 18080 and connect to Kafka at 'kafka:9092', and logging is configured via a new Logback configuration.
football-ui/src/main/resources · high confidence
New top scorers view service
A new 'view-top' microservice has been introduced to generate a top scorers ranking. The service consumes player goal events from a Kafka topic, aggregates the data using a KTable to maintain the top 10 players, and writes the results to an output topic. The implementation includes the application entry point, the Kafka Streams topology builder, and configuration for port 18084. A corresponding unit test verifies the aggregation logic.
football-view-top · high confidence
Behavioural changes
Improved Kafka Streams startup reliability and topic management
The Kafka Streams starter now waits for all required 'fb.\*' topics to be created before starting, preventing endless rebalancing issues. It also enforces a startup timeout and logs errors if the streams fail to reach the RUNNING state. Additionally, the EventPublisher was added to handle event publishing to Kafka, and a JsonNodeSerde was introduced for serializing/deserializing JSON nodes. Utility classes for microservice identification and topic naming were also added.
football-common/src/main/java/org/djar/football/stream · medium confidence
Removed legacy match and event handling components
The MatchController REST endpoint, the Match domain model, the EventHandler Kafka Streams processor, and the EventPublisher class have been removed from the football-command service. This eliminates the previous mechanism for scheduling matches, updating match states, and publishing events like MatchScheduled, MatchStarted, and GoalScored via Kafka, indicating a shift away from this specific implementation of match and goal event handling.
football-command · high confidence
Removed match statistics query implementation and tests
The \MatchStatisticsBuilder\ class, which processed match events to calculate scores and rankings, has been removed from the \football-query\ module. Consequently, the \StatisticsController\ that exposed these statistics via REST endpoints has also been deleted, along with all associated unit tests and test resource files (JSON fixtures for match events). This eliminates the ability to query live match scores and club rankings through the application.
football-query · high confidence
Reorganizes football domain models into model and view packages
The football domain's event and view models have been restructured. Event classes (e.g., CardReceived, GoalScored, MatchFinished) have been moved from the root event package to the model.event package, with the base Event class updated to support timestamping and aggregation IDs. New view models (PlayerCards, PlayerGoals, TopPlayers, MatchScore, TeamRanking) have been introduced to represent player statistics, match scores, and team rankings, enabling the system to track and display top players and match outcomes.
football-common/src/main/java/org/djar/football/model · high confidence
Test coverage
Added demo application and test infrastructure for the football ecosystem; Added integration test suite for the football application; Added unit tests for TopPlayers, JsonNodeSerde, and Topics utilities; Expanded test utilities for Kafka Streams testing.
Dependencies
Initial Maven project structure and dependency configuration
The project is initialized with a multi-module Maven build, establishing a parent POM (football-parent) that coordinates modules for common utilities, match and player services, split view services (view-basic, view-top), a UI module, and a tests module. This setup configures Java 10 compilation, integrates Spring Boot 2.0.2, Kafka Streams 1.1.0, and various testing and utility libraries, while adding Dockerfile Maven plugin support for containerized builds.
(dependencies) · medium 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 53 → 50 (-3.0)
- Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (-0.1)
- Architecture 100 → 100 (-0.5)
- Maturity 66 → 66 (+0.0)
- Readiness 25 → 29 (+3.7)
- Security 94 → 84 (-10.3)
- Domain Modelling 74 → 79 (+4.3)
- Accessibility 57 (new)
Resolved (9)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (6 lines × 2) (football-match/src/main/java/org/djar/football/match/MatchApplication.java)
- Duplicated block (6 lines × 2) (football-match/src/main/java/org/djar/football/match/controller/MatchCommandController.java)
- Duplicated block (8 lines × 2) (football-common/src/main/java/org/djar/football/stream/JsonNodeSerde.java)
- No exposed public API
- Scanner failed to run — not a clean result
- Test reliability not included
- single-maintainer — knowledge-concentration (bus factor) risk
New (22)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (20 lines × 2) (football-match/src/main/java/org/djar/football/match/domain/Player.java)
- Duplicated block (5 lines × 2) (football-common/src/main/java/org/djar/football/model/view/PlayerCards.java)
- Duplicated block (5 lines × 2) (football-match/src/main/java/org/djar/football/match/MatchApplication.java)
- Duplicated block (5 lines × 2) (football-match/src/main/java/org/djar/football/match/controller/MatchCommandController.java)
- Duplicated block (7 lines × 2) (football-common/src/main/java/org/djar/football/stream/JsonNodeSerde.java)
- Duplicated block (8 lines × 2) (football-common/src/main/java/org/djar/football/stream/JsonNodeSerde.java)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
- Medium IaC: WD-DOCKER-0003 (football-match/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (football-player/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (football-ui/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (football-view-basic/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (football-view-top/Dockerfile)
- No ADRs found
- No assertions: scoreGoalInNonExistentMatch (football-match/src/test/java/org/djar/football/match/controller/MatchControllerTest.java)
- …and 2 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
djarza/football-events 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 4cb2a5e8d8ad38062475692be4e94a72039feaa8 — 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.