Skip to content
CAI
Software that uses CAICheck a score

AntonioFalcaoJr/Dotnet6.GraphQL4.WebApplication

43.6

Weak · 21 September 2026

3.2k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This is a .NET 6 web application that serves a product catalog and review system via a GraphQL API. It manages domain entities for products (Backpacks, Boots, Kayaks) and user reviews, exposing them through a structured GraphQL schema with subscriptions. The system also includes a legacy MVC frontend that consumes the GraphQL client to render product listings and review forms.

Features

Add repository and unit-of-work dependency injection extensions

A new ServiceCollectionExtensions class provides methods to register repository scanning, unit-of-work, and transaction configuration. The AddRepositories method uses Scrutor to scan assemblies for classes assignable to IRepository\<\> and registers them as scoped services. The AddUnitOfWork method registers the UnitOfWork implementation as a scoped service. The ConfigureTransactionOptions method binds TransactionOptions from configuration, applies data annotation validation, and enforces that the transaction isolation level is not unspecified.

src/Dotnet6.GraphQL4.Repositories.Abstractions/DependencyInjection/Extensions · high confidence

Added GraphQL schema and resolvers for the Store API

The Store API now exposes a complete GraphQL interface for browsing and managing store data. Users can query for products (including specific types like Backpacks, Boots, and Kayaks), retrieve paginated product lists, and fetch individual product details with associated reviews. The API also supports creating new reviews and subscribing to review events via GraphQL subscriptions. This change introduces the necessary graph types, query/mutation/subscription definitions, and custom document executers to handle these operations.

src/Dotnet6.GraphQL4.Store.WebAPI/Graphs · high confidence

Added health check and configuration dump endpoints

New extension methods have been added to register custom health check and configuration dump endpoints. The health check endpoint returns a JSON response containing the overall status, total duration, and details for each dependency health check, including name, status, duration, and any associated errors. The configuration dump endpoint allows exposing configuration information in development environments. These endpoints are now available for integration into the application's routing.

src/Dotnet6.GraphQL4.Store.WebMVC/Extensions · high confidence

Added product and review service models, converters, and profiles

The Store.Services module now includes new models for products (BackpackModel, BootModel, KayakModel) and reviews (ReviewModel, ReviewMessage), along with their corresponding domain converters and AutoMapper profiles. This introduces the service-layer representation for managing product and review data, enabling the application to map between domain entities and service models for these specific types.

src/Dotnet6.GraphQL4.Store.Services · high confidence

Added product and review views and assets

The WebMVC project now includes the Razor views for the product catalog (Index, Detail) and the review system (Add, Reviews), along with the corresponding CSS stylesheets (Article-Dual-Column, Article-List, styles) and Font Awesome 4.7.0 assets required to render the product listing, product details, and user reviews.

src/Dotnet6.GraphQL4.Store.WebMVC/Views, src/Dotnet6.GraphQL4.Store.WebMVC/wwwroot · high confidence

Added transaction scope execution utilities

Introduced new classes and extensions to manage database transactions using TransactionScope. The diff adds TransactionScopeExecutor\<T\> which provides a fluent API to configure transaction scope options, transaction options, async flow settings, and conditional commit logic for both synchronous and asynchronous operations. The accompanying extension methods allow easy instantiation of these executors from operation delegates.

src/Dotnet6.GraphQL4.Repositories.Abstractions/Transactions · high confidence

Centralized GraphQL and health check routing extensions

The application now provides dedicated extension methods in the DependencyInjection namespace to configure the web host. ServiceCollectionExtensions registers the GraphQL schema, executers, and JSON serialization settings. ApplicationBuilderExtensions adds WebSocket and GraphQL middleware, including a configured Playground UI. EndpointRouteBuilderExtensions exposes MapLivenessHealthCheck, MapReadinessHealthCheck, and MapDumpConfig endpoints for health monitoring and configuration debugging. ExceptionHandlerExtensions adds a global exception handler that logs errors and returns structured JSON responses.

src/Dotnet6.GraphQL4.Store.WebAPI/DependencyInjection · high confidence

Introduce Unit of Work with transactional execution and save methods

Added the IUnitOfWork interface and UnitOfWork implementation to the repositories abstraction layer. The UnitOfWork class now provides methods to execute operations within a transactional scope, supporting both synchronous and asynchronous execution with configurable isolation levels and conditions. It also includes SaveChanges and SaveChangesAsync methods to persist changes to the database.

src/Dotnet6.GraphQL4.Repositories.Abstractions/UnitsOfWork · high confidence

Introduce domain models and builders for Backpack, Boot, Kayak, and Review entities

The domain layer now includes new entity classes for Backpack, Boot, and Kayak products, each with corresponding builders and validators. These entities extend a common Product base class that manages shared attributes like name, price, and reviews. Each product type has specific validation rules (e.g., Boot size must be greater than zero, Kayak person count must be valid). Additionally, a Review entity and its builder/validator are introduced, allowing users to add reviews to products. The changes also include enumerations for product types and options, supporting the new domain structure.

src/Dotnet6.GraphQL4.Store.Domain · high confidence

Introduces domain abstraction primitives for entities, value objects, and builders

The domain abstraction layer now provides foundational building blocks for domain modeling. An abstract Entity base class is added with built-in validation support using FluentValidation, allowing entities to track their validity state. A ValueObject base class is introduced to enforce value-based equality and consistent hashing. Additionally, a generic Builder pattern is implemented with a corresponding interface and an internal extension method to support fluent configuration of these domain objects. The dependency injection setup is updated to automatically scan and register all classes assignable to the new IBuilder interface as scoped services.

src/Dotnet6.GraphQL4.Domain.Abstractions · high confidence

Introduces structured logging and notification context to the WebAPI

The WebAPI project now integrates Serilog for structured logging, with configuration provided in appsettings.json and appsettings.Development.json. A new NotificationContext and its interface (INotificationContext) have been added to the CrossCutting layer, exposing a service for managing validation and execution notifications. The Startup class has been updated to register the notification context and wire up Serilog, while the Program entry point configures the host builder to use Serilog and perform database migrations on startup.

src/Dotnet6.GraphQL4.Store.WebAPI · high confidence

New service abstraction layer for domain entities

The \Dotnet6.GraphQL4.Services.Abstractions\ project now provides a standardized service layer for managing domain entities. This includes a generic \IService\ interface and \Service\ base class that implement common CRUD operations (Create, Read, Update, Delete) with support for asynchronous execution, projection, and pagination. Additionally, a \MessageService\ is introduced to handle message-based interactions, and dependency injection extensions are provided to automatically register application services, AutoMapper mappings, and reactive subjects.

src/Dotnet6.GraphQL4.Services.Abstractions · high confidence

Behavioural changes

Add TransactionOptions with data annotation validation

A new TransactionOptions class has been introduced to the dependency injection options, configuring transaction isolation levels. The class includes a required IsolationLevel property that is validated using System.ComponentModel.DataAnnotations attributes, specifically \[Required\] and \[EnumDataType\] for the IsolationLevel enum.

src/Dotnet6.GraphQL4.Repositories.Abstractions/DependencyInjection/Options · medium confidence

Added GraphQL client for store operations

Introduced a new GraphQL client implementation (StoreGraphClient) and its interface (IStoreGraphClient) to handle store-related queries and mutations. The client provides methods to retrieve all products, fetch a specific product by ID, get reviews for a product, and add a new review. It also supports subscribing to real-time updates for new reviews. This change reflects an adjustment in how the application communicates with the GraphQL API, moving from previous query structures to these specific operations.

src/Dotnet6.GraphQL4.Store.WebMVC/Clients · medium confidence

Added database seeding and SQL Server retry strategy to the store context

The StoreDbContext now includes a new Seeder class that populates the database with initial data for products, product types, and reviews using the Bogus library. Additionally, the context has been updated to configure a custom SQL Server execution strategy (SqlServerRetryingExecutionStrategy) that handles transient failures with configurable retry counts and delays, alongside enabling detailed error and sensitive data logging.

src/Dotnet6.GraphQL4.Store.Repositories/Contexts · high confidence

Centralized DbContext and health check registration via new extension methods

The repository layer now provides a dedicated \ServiceCollectionExtensions\ class that consolidates dependency injection setup. It adds a \StoreDbContext\ as a scoped service and configures \SqlServerRetryingOptions\ using DataAnnotations validation. Additionally, it registers health checks for both liveness and readiness, including a custom query against the \Products\ table to verify database connectivity.

src/Dotnet6.GraphQL4.Store.Repositories/DependencyInjection · medium confidence

Entity configurations for Products and Reviews use VARCHAR instead of NVARCHAR

The entity type configurations for Product, Backpack, Boot, Kayak, and Review have been updated to map string properties to VARCHAR columns in the database by calling .IsUnicode(false). This change affects how text data is stored and retrieved, potentially reducing storage space and improving performance for these specific fields.

src/Dotnet6.GraphQL4.Store.Repositories/Configurations · high confidence

Introduced .NET 6 and GraphQL 4 repository abstractions and MVC controllers

The repository layer now uses a new \IRepository\<TEntity, TId\>\ interface and a generic \Repository\<TEntity, TId\>\ base class, along with \PageInfo\, \PageParams\, and \PagedResult\ types to support paginated queries. A concrete \ProductRepository\ implements the repository interface, and the \HomeController\, \ProductsController\, and \ReviewsController\ in the WebMVC project are updated to use the new \IStoreGraphClient\ for fetching products and reviews, reflecting the migration to .NET 6 and GraphQL 4.

(repo-wide) · high confidence

Migrate WebMVC project to .NET 6 with Serilog and health checks

The WebMVC project has been upgraded to .NET 6, introducing a new Dockerfile and updated project structure. This change integrates Serilog for structured logging, configures application health checks for liveness and readiness probes, and adds a /dump-config endpoint for debugging configuration in development environments.

src/Dotnet6.GraphQL4.Store.WebMVC · medium confidence

Project renamed and upgraded to .NET 6 and GraphQL 4

The solution and project structure have been renamed from Dotnet5.GraphQL.WebApplication to Dotnet6.GraphQL4.WebApplication, reflecting an upgrade to .NET 6 and GraphQL 4. This change includes updated project references in the solution file, a new Directory.Build.props file defining .NET 6 as the target framework, and a global.json file pinning the SDK version to 6.0.100. Additionally, the repository now includes a docker-compose.yml file for containerized development and deployment, along with standard repository files like CODE\_OF\_CONDUCT.md, CONTRIBUTING.md, and LICENSE.

(repo-wide) · high confidence

Removal of default MVC view templates

The default MVC view templates, including the Home index and Privacy pages, along with the global view imports configuration, have been removed from the application. This change eliminates the standard landing and privacy policy pages that were previously served by the MVC framework, reflecting a shift away from traditional server-rendered HTML views in favor of the application's new WebAPI and GraphQL architecture.

src/Dotnet5.GraphQL.WebApplication.MVC/Views · high confidence

Removal of legacy ASP.NET MVC application structure

The legacy ASP.NET MVC application entry points and configuration files have been removed. Specifically, the \Program.cs\ (host builder), \Startup.cs\ (service and middleware configuration), \ErrorViewModel.cs\, and both \appsettings.json\ configuration files have been deleted from the \src/Dotnet5.GraphQL.WebApplication.MVC\ directory. This indicates a shift away from the traditional MVC request pipeline in favor of the new GraphQL-based architecture.

src/Dotnet5.GraphQL.WebApplication.MVC · high confidence

Removal of legacy MVC controllers

The default HomeController, which previously served the Index, Privacy, and Error views, has been removed from the application. This change eliminates the standard MVC controller template, indicating a shift away from traditional MVC rendering in favor of other architectural patterns.

src/Dotnet5.GraphQL.WebApplication.MVC/Controllers · high confidence

Updated database migration to use VARCHAR instead of NVARCHAR for string columns

The initial database migration for the store repository has been regenerated to define string columns (such as Product Name, Description, Review Title, and Comment) as VARCHAR rather than NVARCHAR. This change reduces storage space for text data in the SQL Server database, as VARCHAR stores single-byte characters while NVARCHAR stores double-byte characters. The migration also includes seed data for ProductTypes, Products, and Reviews.

src/Dotnet6.GraphQL4.Store.Repositories/Migrations · high confidence

Dependencies

Migrate from .NET 5 to .NET 6 and upgrade GraphQL dependencies

The project has been upgraded from .NET 5 to .NET 6, replacing the old \Dotnet5\ project structure with a new \Dotnet6\ architecture. This includes adding new project references for cross-cutting concerns, domain abstractions, repositories, and services. Additionally, the \GraphQL.Client.Extensions\ package has been upgraded to version 4.0.0, and other dependencies such as \Bogus\ (34.0.2), \AutoMapper\, and \Serilog\ have been updated to their latest versions.

(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

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 44 → 44 (-0.6)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 76 → 74 (-1.9)
  • Architecture 87 → 87 (-0.1)
  • Maturity 46 → 46 (+0.0)
  • Readiness 44 → 41 (-2.8)
  • Security 35 → 36 (+1.0)
  • Accessibility 63 → 60 (-3.5)

Resolved (21)

  • Bounded contexts not declared
  • 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)
  • 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)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • The README is a banner with no architecture description; the outline lists domain layers but none are explained. (README.md)
  • The README is a one-line banner with no architecture description and no usage guidance for the GraphQL 4 Web API. (README.md)
  • …and 1 more

New (47)

  • Change coupling: StoreGraphClient.cs ↔ HomeController.cs (src/Dotnet6.GraphQL4.Store.WebMVC/Clients/StoreGraphClient.cs)
  • Change coupling: StoreMutation.cs ↔ StoreQuery.cs (src/Dotnet6.GraphQL4.Store.WebAPI/Graphs/StoreMutation.cs)
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (19 lines × 2) (src/Dotnet6.GraphQL4.Store.WebAPI/Program.cs)
  • Duplicated block (24 lines × 2) (src/Dotnet6.GraphQL4.Store.WebAPI/Graphs/Types/Products/ProductGraphType.cs)
  • Duplicated block (33 lines × 2) (src/Dotnet6.GraphQL4.Repositories.Abstractions/IRepository.cs)
  • High IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • High IaC: WD-COMPOSE-0002 (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)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 27 more

API surface

  • Unchanged — 1 HTTP endpoints

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

AntonioFalcaoJr/Dotnet6.GraphQL4.WebApplication 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 bf54d7085ccf5280cd34721438612264b390a812 — 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.