Angular2Guy/AngularAndSpringWithMaps
56.5
Adequate · 21 September 2026
2.6k
lines of production code
Java
with TypeScript
4
measurements over time
What this system is
This system is a geospatial management application that allows users to create, update, and query company map sites along with their associated polygon, ring, and location data. It exposes this functionality through a GraphQL API built on a Spring Boot backend, which persists the hierarchical geographic entities in a PostgreSQL database. The application serves a modern Angular frontend that renders the map data, with the entire stack containerized for deployment via Kubernetes or Knative.
How it got here
2020–2021 — Major platform modernization and containerization
6 changes.
The project underwent a significant overhaul, migrating the backend to Spring Boot 4 with Java 25 and restructuring the frontend to Angular 22 within a multi-module Gradle build. This modernization was accompanied by the removal of legacy configuration and scaffolding, the introduction of dedicated Dockerfiles for JVM and GraalVM native images, and the creation of initial Helm charts for Kubernetes and Knative deployment.
2022 — backend architecture and domain implementation
12 changes.
The project established the backend foundation by defining the domain model, JPA repositories, and GraphQL API for managing company map sites and geographic data. This period also involved configuring the application infrastructure, including security, database migrations, and architectural validation, while migrating the frontend to Angular 18 standalone components.
2023 — Test coverage and architecture documentation
4 changes.
This period focused on enhancing code reliability by adding comprehensive unit tests for the CompanySite controller, service, and repository layers. Additionally, initial Structurizr architecture documentation was introduced to visualize the system's components and their relationships.
Features
Add GraphQL controllers for company site management and configuration
New GraphQL controllers have been introduced to expose company site operations and system configuration. CompanySiteController provides queries to retrieve sites by title and year or by ID, mutations to upsert and delete polygons, and batch mappings to efficiently resolve nested polygon, ring, and location data. ConfigurationController exposes the Bing Maps API key via a query, allowing clients to retrieve the necessary key for map rendering.
backend/src/main/java/ch/xxx/maps/adapter/controller · high confidence
Added EntityDtoMapper for bidirectional mapping of map geometry models
Introduced a new Spring component, EntityDtoMapper, that handles the conversion between domain entities (CompanySite, Polygon, Ring, Location) and their corresponding DTOs. This mapper supports bidirectional transformation, allowing users to update existing hierarchical geometry structures via DTOs while preserving entity IDs, and to serialize complex nested map data into DTOs for API responses.
backend/src/main/java/ch/xxx/maps/usecase/mapper · high confidence
Initial GraphQL schema definition for company site and polygon management
A new GraphQL schema file has been added to the backend resources, establishing the core type definitions and API operations for managing company sites and their associated geographic data. The schema introduces custom scalars for Date, BigDecimal, and Long, and defines input/output types for CompanySite, Polygon, Ring, and Location entities, enabling clients to query main configuration and company sites by title or ID, as well as perform mutations to upsert company sites, reset the database, and delete polygons.
backend/src/main/resources/graphql · high confidence
Initial Helm chart for Angular and Spring with Maps application
This change introduces a new Helm chart (version 0.1.0) for deploying the Angular and Spring with Maps application. The chart includes templates for a PostgreSQL database and a web application, configuring resources, environment variables, and health probes. It provides separate template sets for Kubernetes and Knative, with the Kubernetes template set as the default via a symlink. A helper script is also added to simplify installation with NodePort service configuration.
helm · high confidence
Initial Structurizr architecture documentation added
The repository now includes Structurizr configuration files that define the architecture of the AngularAndSpringWithMaps system. This adds a workspace definition (workspace.dsl) and generated SVG diagrams for the System Context, Containers, and Components views, documenting the relationship between the User, the Angular/Spring application, and the PostgreSQL database.
structurizr · high confidence
Initial backend configuration and static assets for production and development
This change introduces the foundational configuration files and static resources for the backend service. It adds \application-prod.properties\ to define production-specific settings, including PostgreSQL database connectivity, JPA validation, and disabled consoles. It also adds \application.properties\ which configures the default development environment with an H2 in-memory database, enables H2 and GraphiQL consoles, sets up Liquibase for database migrations, configures graceful server shutdown, and exposes health, Prometheus, and metrics endpoints via Spring Boot Actuator. Additionally, it adds a \.gitignore\ for static assets and moves the main Angular application entry point (\index.html\) into the backend's static resources directory.
backend/src/main/resources · high confidence
Initial backend configuration for GraphQL, security, and frontend routing
This change introduces the core configuration classes for the backend adapter layer. It adds a ForwardServletFilter to route non-API requests to locale-specific frontend index.html files, enabling client-side routing for paths like /graphql, /actuator, and language prefixes. A new SecurityConfig establishes a stateless security policy with Content Security Policy (CSP) directives allowing resources from Microsoft Bing and Virtual Earth, while disabling CSRF. GraphqlConfig registers a comprehensive set of extended scalars (e.g., Date, DateTime, UUID, Json) for the GraphQL runtime. Additionally, a GlobalExceptionHandler is added to return 404 responses for ResourceNotFoundExceptions, and a custom PGSQLMapDialect is defined for PostgreSQL 9.5 compatibility.
backend/src/main/java/ch/xxx/maps/adapter/config · high confidence
Initial database schema and seed data for location-based entities
The application now initializes a database schema using Liquibase, creating tables for company sites, polygons, rings, and locations to support geographic data management. The schema includes a hibernate sequence, foreign key constraints linking polygons to company sites and rings, and locations to rings. Additionally, seed data is loaded for company sites (Finkenwerder, Toulouse), polygons, rings, and specific geographic coordinates, establishing the foundational data structure for location tracking features.
backend/src/main/resources/dbchangelog · high confidence
Initial domain model and data transfer objects for map sites
This change introduces the core domain model for managing company map sites, including JPA entities (CompanySite, Polygon, Ring, Location) with their relationships and validation constraints, along with corresponding Data Transfer Objects (CompanySiteDto, PolygonDto, RingDto, LocationDto, MainConfigurationDto) and repository interfaces. It also adds a base entity class for common ID handling, a utility for stream conversion, and a custom ResourceNotFoundException, establishing the backend's data structure for geographic site data.
backend/src/main/java/ch/xxx/maps/domain · high confidence
Introduce CompanySiteService for managing site, polygon, ring, and location data
Added a new CompanySiteService that provides CRUD operations and data-fetching capabilities for CompanySite entities and their nested children (Polygons, Rings, Locations). The service includes methods to find sites by title and year, retrieve sites by ID (with or without detached entities), upsert sites, and delete polygons along with their associated rings and locations. It also offers batch fetching methods to retrieve DTOs for polygons, rings, and locations, ensuring proper entity detachment to avoid lazy-loading issues. Additionally, a resetDb method is provided to clear all test data (entities with IDs \>= 1000) from the database.
backend/src/main/java/ch/xxx/maps/usecase/service · high confidence
Introduces JPA-based repository implementations for map entities
The backend now uses Spring Data JPA repositories to persist and query map-related domain entities. New adapter classes (CompanySiteRepositoryBean, LocationRepositoryBean, PolygonRepositoryBean, RingRepositoryBean) implement the domain repository interfaces by delegating to corresponding JPA interfaces (JpaCompanySiteRepository, JpaLocationRepository, JpaPolygonRepository, JpaRingRepository). This enables CRUD operations and specific queries, such as finding company sites by title and date range or fetching locations by ring IDs, using the JPA persistence layer.
backend/src/main/java/ch/xxx/maps/adapter/repository · high confidence
New Dockerfiles for JVM and Native images with Spring AOT and memory limits
The project now provides dedicated Dockerfiles for running the application as a standard JVM image (Dockerfile-Jvm) and as a GraalVM native image (Dockerfile-Native). The JVM Dockerfile enables Spring AOT optimization via the -DspringAot=true flag and configures JVM memory limits using G1GC and MaxRAMPercentage. The native Dockerfile runs the compiled native binary directly. Additionally, build scripts (buildDocker.sh, buildNative.sh) and local infrastructure scripts (Prometheus, Grafana, PostgreSQL, Structurizr) have been updated or added to support these new image types and local development workflows.
(repo-wide) · high confidence
Removals
Removal of legacy Angular maps module scaffolding
The Angular maps module's initial scaffolding has been removed, including the root application module, splash component, and associated test files. This cleanup also deletes the legacy configuration files for browser targeting (\.browserslistrc\), linting (\tslint.json\), and internationalization (\messages.xlf\), indicating a transition away from the older Angular 11 project structure and tooling.
src/angular · high confidence
Behavioural changes
Angular frontend migration to standalone components and Angular 18
The frontend application has been migrated to use Angular's standalone component architecture, replacing the previous module-based structure with standalone components and the new \app.config\ provider pattern. This update aligns the codebase with Angular 18 standards, introducing features like signals for state management and the new \@for\ loop syntax in templates. The migration also includes a switch from the legacy \tslint\ linter to \@angular-eslint\, updates the build builder to \@angular-devkit/build-angular:application\, and adds support for German localization via i18n JSON files.
frontend · high confidence
Application entry point relocated to backend module
The main application class (MapsApplication.java) has been moved from the project root to the backend module directory. This change reorganizes the project structure to better align with the backend module's scope, ensuring the application entry point is co-located with other backend-specific code.
backend/src/main/java/ch/xxx/maps · high confidence
Removal of legacy URL rewriting and application properties
The application no longer uses the \urlrewrite.xml\ configuration file, which previously handled URL rewriting rules for German (\/de/\) and English (\/en/\) paths. Additionally, the \application.properties\ file has been removed, indicating a shift away from this specific properties-based configuration approach.
src/main · high confidence
Test coverage
Added architecture and pattern validation tests; Added tests for CompanySiteRepository; Added unit tests for CompanySiteService; Added unit tests for the CompanySite GraphQL controller.
Dependencies
Gradle wrapper upgraded to version 9.1.0
The Gradle wrapper has been updated from version 6.6.1 to 9.1.0. This change ensures that the project uses the newer Gradle distribution for builds, which may bring performance improvements, new features, and compatibility updates to the build process.
gradle · high confidence
Migrate to multi-module Gradle build with Spring Boot 4 and Angular 22
The project has been restructured into a multi-module Gradle build with separate \backend\ and \frontend\ subprojects. The backend now targets Java 25 and upgrades to Spring Boot 4.1.0, replacing older starters with modern equivalents like \spring-boot-starter-restclient\ and \spring-boot-starter-graphql\, while removing legacy Swagger dependencies. The frontend has been upgraded from Angular 10 to Angular 22, utilizing the \com.github.node-gradle.node\ plugin to manage Node.js 24.16.0 and NPM 11.13.0, and now builds its assets into the backend's static resources directory during the Gradle build process.
(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
Score
- CAI 62 → 57 (-5.3)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 89 → 90 (+0.2)
- Architecture 100 → 90 (-10.2)
- Maturity 74 → 73 (-1.6)
- Readiness 59 → 45 (-14.1)
- Security 65 → 69 (+3.8)
- Domain Modelling 100 → 100 (-0.0)
- Accessibility 55 → 55 (+0.0)
Resolved (45)
- Coverage not included — suite not readable by the collector
- Critical CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (8 lines × 4) (backend/src/main/java/ch/xxx/maps/domain/model/entity/CompanySite.java)
- Further orphaned files (smaller)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- …and 25 more
New (74)
- Change coupling: EntityDtoMapper.java ↔ CompanySiteService.java (backend/src/main/java/ch/xxx/maps/usecase/mapper/EntityDtoMapper.java)
- Critical CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no architecture or design documentation (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (9 lines × 4) (backend/src/main/java/ch/xxx/maps/domain/model/entity/CompanySite.java)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- High CVE: [GHSA redacted] (frontend/src/angular/package-lock.json)
- …and 54 more
Changes since last survey
- 5 commits — 0 feature/other, 5 fixes
By area
- frontend/src — 2 commits
- (root) — 1 commit
- backend/build.gradle — 1 commit
- backend/src — 1 commit
Notable commits
- fix: fix: config
- fix: fix: update
- fix: fix: update
- fix: fix: update
- fix: fix: update
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Angular2Guy/AngularAndSpringWithMaps 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 9abf6f0812627abdfb3cd25d55559455a5a191f5 — 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.