AntonioFalcaoJr/Dotnet6.GraphQL4.WebApplication
43.6
Weak · 21 September 2026
3.2k
lines of production code
C#
primary language
4
measurements over time
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.