thangchung/practical-dapr
39.4
Weak · 21 September 2026
7.9k
lines of production code
C#
primary language
4
measurements over time
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
Add IdentityServer4 quickstart UI for authentication and consent
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.