Skip to content
CAI
Software that uses CAICheck a score

thangchung/practical-dapr

39.4

Weak · 21 September 2026

7.9k

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 system is a .NET-based microservices architecture for managing products and inventory, orchestrated locally via Dapr and Tye. It provides a comprehensive backend with domain-driven design patterns, database persistence, and multiple API interfaces including GraphQL, gRPC, and REST. The application includes an IdentityServer4-based authentication service and a WebUI frontend that interacts with product and inventory services.

Features

Add Helm charts for Zipkin, SQL Server, and Seq

New Helm chart configurations and templates have been added for Zipkin, SQL Server, and Seq. This includes the Zipkin application chart with deployment and service templates, along with default and development-specific values files for Zipkin, SQL Server, and Seq, enabling the deployment of these services via Helm.

helm · high confidence

The Identity service now includes the full set of IdentityServer4 quickstart UI components, providing built-in login, logout, external authentication, consent, device authorization, and grant management pages. This adds a functional identity provider implementation with configurable local and external login flows, user consent screens, and client grant management, enabling immediate use of the identity server without custom UI development.

src/Identity · high confidence

Add inventory service with store and pricing management

A new inventory service has been introduced, providing APIs to manage store locations and their associated product prices. The service exposes gRPC and GraphQL endpoints to retrieve store availability and details, and handles commands to add, update, or delete store product prices. The backend uses Entity Framework Core with database migrations to persist Store and StoreProductPrice entities, and subscribes to product lifecycle events (created, updated, deleted) to keep inventory data in sync.

src/ProductCatalog · high confidence

Added GraphQL client and API controllers for product and inventory management

The WebUI host now includes a generated GraphQL client (StrawberryShake 11.0.0) and corresponding API controllers (ProductController, InventoryController, AccountController) that expose endpoints for querying and mutating product and store data. Users can now retrieve product lists, categories, and store information via the new /api/products and /api/inventories endpoints, and perform create, update, and delete operations on products through the GraphQL layer.

src/WebUI · high confidence

Added domain foundation classes for exception handling and event tracking

The N8T.Domain building block now includes core infrastructure to support domain-driven design patterns. A new CoreException class provides a standardized way to handle domain errors with specific static methods for null, invalid, and not-found scenarios. Additionally, the domain layer introduces a domain event system: an IDomainEvent interface backed by DomainEventBase, along with an IDomainEventContext for retrieving pending events. EntityBase is added as an abstract base class for entities, equipping them with a DomainEvents collection and methods to add or remove domain events, enabling consistent event tracking across the domain model.

src/BuildingBlocks/N8T.Domain · medium confidence

Adds infrastructure layer with database, GraphQL, and gRPC support

The N8T.Infrastructure package introduces a comprehensive set of building blocks for the application. It provides Entity Framework Core integration with automatic database migration on startup, along with a transactional pipeline behavior for MediatR commands. GraphQL support is added via HotChocolate, including offset-based pagination and error filtering. gRPC services are supported with a global exception handling interceptor and client extensions. Additionally, the package includes configuration helpers, status reporting, and validation model utilities.

src/BuildingBlocks/N8T.Infrastructure · high confidence

Initial project scaffolding and local development tooling

The repository was initialized with essential configuration files to support a .NET microservices architecture using Dapr and Tye. This includes a solution file defining the project structure (GraphApi, Identity, ProductCatalog, Inventory, WebUI), an editorconfig for consistent code formatting, and Tye/YAML manifests for local orchestration. A PowerShell script was added to launch all services via Dapr, and a nuget.config was created to include the FeatherHTTP feed alongside standard NuGet sources.

(repo-wide) · high confidence

Behavioural changes

Add inventory service gRPC schema

New protocol buffer definitions for the inventory service are introduced, defining the data models (StoreDto, StoreProductPriceDto) and the gRPC service interface (InventoryApi) with methods to retrieve store information.

_src/\schema · high confidence

Dependencies

Upgrade to .NET 5 and Dapr 0.7

The project has been upgraded to .NET 5, with most services targeting the net5.0 framework. Additionally, the Dapr SDK has been upgraded to version 0.7 (specifically 0.7.0-preview01 in the infrastructure layer), and the project now references Tye 0.3 and IdentityServer4 3.1.3. The WebUI layer remains on .NET Core 3.1/Blazor 3.2 for client-side rendering, while backend services have moved to the newer .NET 5 runtime.

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

Lenses

  • Code Health 59 → 59 (-0.0)
  • Architecture 88 → 88 (+0.2)
  • Maturity 63 → 63 (+0.0)
  • Readiness 29 → 28 (-1.1)
  • Security 74 → 74 (-0.0)
  • Domain Modelling 63 → 67 (+4.4)
  • Accessibility 33 → 32 (-1.7)

Resolved (22)

  • Bounded contexts not declared
  • Build status unknown
  • Dependency Hygiene not included (time budget)
  • Dormant codebase
  • Duplicated block (13 lines × 2) (src/BuildingBlocks/N8T.Infrastructure/Tye/Extensions.cs)
  • Duplicated block (15 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Application/CreateProduct/CreateProductValidator.cs)
  • Duplicated block (7 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Program.cs)
  • Duplicated block (8 lines × 2) (src/GraphApi/CoolStore.GraphApi/Program.cs)
  • 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)
  • LLM evaluation failed
  • LLM evaluation failed
  • …and 2 more

New (52)

  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (10–15 lines × 2) (src/WebUI/CoolStore.WebUI/Pages/Products/CreateProductModel.cs)
  • Duplicated block (11 lines × 2) (src/BuildingBlocks/N8T.Infrastructure/Extensions.cs)
  • Duplicated block (13 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Application/CreateProduct/CreateProductHandler.cs)
  • Duplicated block (14 lines × 2) (src/BuildingBlocks/N8T.Infrastructure/Tye/Extensions.cs)
  • Duplicated block (26 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Application/CreateProduct/CreateProductValidator.cs)
  • Duplicated block (5 lines × 2) (src/Inventory/CoolStore.InventoryApi/Infrastructure/Apis/GraphQL/StoreType.cs)
  • Duplicated block (7–53 lines × 2) (src/Inventory/CoolStore.InventoryApi/Program.cs)
  • Duplicated block (8 lines × 2) (src/GraphApi/CoolStore.GraphApi/Program.cs)
  • Duplicated block (8 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Application/CreateProduct/CreateProductCommand.cs)
  • Duplicated block (8 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Domain/ProductCreated.cs)
  • Duplicated block (8 lines × 2) (src/ProductCatalog/CoolStore.ProductCatalogApi/Infrastructure/Dtos/CatalogProductDto.cs)
  • Duplicated block (9 lines × 2) (src/Inventory/CoolStore.InventoryApi/Application/AddStoreProductPrice/AddStoreProductPriceCommand.cs)
  • End-of-life runtime: .NET net5.0
  • End-of-life runtime: .NET netcoreapp3.1
  • 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 32 more

API surface

  • Unchanged — 17 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

thangchung/practical-dapr 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 7ed73041c801b0027549d3ef4d93dd09bd48a2d6 — 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.