Skip to content
CAI
Software that uses CAICheck a score

ren8179/Qf.Core

38.1

Weak · 21 September 2026

8k

lines of production code

JavaScript

with C#

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a .NET-based application framework designed to accelerate the development of microservices and web APIs. It provides a standardized infrastructure for data access, object mapping, and background task execution, while also offering an API gateway for routing and monitoring. The codebase demonstrates these capabilities through a TodoList sample application that integrates SQL and MySQL databases, Vue.js frontend templates, and MediatR-based command/query handlers.

Features

Add Ant Design Pro Vue frontend boilerplate and ASP.NET Core Web host

Introduces the \ant-vue\ directory containing the Ant Design Pro Vue frontend boilerplate, including configuration files (\.eslintrc.js\, \.prettierrc\, \babel.config.js\), environment variables (\.env\), and source code (\src/App.vue\, \src/api/\). Additionally, adds the ASP.NET Core \Program.cs\, \Startup.cs\, and \launchSettings.json\ to host the application.

samples/Qf.SysTodoList.Web/ant-vue · high confidence

Add MySQL infrastructure sample for TodoList

A new MySQL implementation for the TodoList sample was added, including a base class for basic queries with pagination support, an EF Core extension to configure MySQL as the database provider, and a TodoDbContext that maps to MySQL. This provides a ready-to-use example of integrating MySQL into the system.

samples/Qf.SysTodoList.Infrastructure.MySql · high confidence

Add TodoTask query interface and implementation

The Qf.SysTodoList.Application/Queries area now includes a new \ITodoTaskQueries\ interface and its \TodoTaskQueries\ implementation, providing methods to retrieve paginated lists of todo tasks by type, by specific field values, or by date range, as well as fetching a single task by ID.

samples/Qf.SysTodoList.Application/Queries · high confidence

Add integration event handling for creating todo tasks

Added an integration event handler that listens for AddTodoTaskIntegrationEvent messages and processes them by sending a CreateTodoTaskCommand through MediatR, enabling the application to react to external todo task creation events.

samples/Qf.SysTodoList.Application/IntegrationEvents · high confidence

Added architecture diagram and SQL documentation

Added a new code map diagram (SysTodoListCodeMap.dgml) that visualizes the project structure and dependencies between the Qf.SysTodoList.Domain, Application, Infrastructure, WebApi, and Web components. Also added a new SQL script (ProcGetPageData.sql) for a stored procedure that handles paginated data retrieval with dynamic sorting and filtering.

doc · high confidence

Added command handlers for creating todo tasks

The application layer now includes new command handlers for creating todo tasks. Specifically, \AddCommandHandler\ and \CreateTodoTaskCommandHandler\ have been added to process \AddCommand\ and \CreateTodoTaskCommand\ respectively. The \CreateTodoTaskCommandHandler\ integrates with AutoMapper to map input data to domain models, while the \AddCommandHandler\ provides a basic implementation using the database context directly.

samples/Qf.SysTodoList.Application/Handlers · high confidence

AutoMapper and EF Core integration layers added to the framework

The framework now includes dedicated modules for object mapping and Entity Framework Core integration. The new Qf.Core.AutoMapper module provides a unified IObjectMapper interface and DI registration to handle automatic object-to-object mapping via AutoMapper, allowing developers to configure and use mapping profiles easily. Simultaneously, the Qf.Core.EFCore module introduces a structured approach to database context management, featuring a connection string resolver, a base QfDbContext with standardized save/change tracking behavior, and a generic repository implementation. These additions streamline data access and object mapping workflows within the application.

framework · high confidence

Introduce API Gateway and HTTP Reports monitoring service

Added a new API Gateway project (Qf.APIGateway) based on Ocelot, which routes requests to downstream services and supports rate limiting and circuit breaking. The gateway also integrates HttpReports for monitoring and includes a health check endpoint. Additionally, a separate HttpReports dashboard service (Qf.HttpReports) was added to collect and display HTTP request metrics, with configuration for SQL Server storage and email alerts.

gateway · high confidence

Introduce new WebApi sample with background task and logging support

A new WebApi sample project, Qf.SysTodoList.WebApi, has been added. It includes a Dockerfile for containerization, a Program entry point, and a QueuedHostedService for executing long-running background tasks. The application is configured with Autofac for dependency injection, Serilog for logging, and AutoMapper for object mapping, providing a complete, runnable example of the framework's capabilities.

samples/Qf.SysTodoList.WebApi · high confidence

New sample API controllers for health checks, task management, and client IP retrieval

The sample Web API project now includes three new controllers that expose endpoints for application health checks, CRUD operations for todo tasks via MediatR, and retrieving the client's IP address from the X-Forwarded-For header. These additions provide a working example of how to structure controllers, integrate with the application's command/query handlers, and access HTTP context information in the sample project.

samples/Qf.SysTodoList.WebApi/Controllers · high confidence

Behavioural changes

Add SQL Server support and base query infrastructure

The system now supports SQL Server as a database provider. This is enabled by adding a new \BasicQueriesBase\ class that provides generic, asynchronous query methods (such as \GetPageAsync\ and \QueryAsync\) for database operations, and a \TodoDbContext\ class that configures Entity Framework Core for SQL Server. These changes allow the application to execute database queries and manage database contexts using SQL Server.

samples/Qf.SysTodoList.Infrastructure · high confidence

Dependencies

Qf.Core framework upgraded to .NET 10 and .NET 8

The Qf.Core framework and its associated libraries (including Qf.Core, Qf.Core.Web, Qf.Core.EFCore, Qf.Core.AutoMapper, and Qf.Extensions.Configuration.Encryption) have been upgraded to target .NET 10. Additionally, the Qf.SysTodoList sample application and its infrastructure components have been upgraded to target .NET 8. This update aligns the core framework with the latest .NET runtime, while the sample projects utilize .NET 8, ensuring compatibility with modern .NET versions.

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

Lenses

  • Code Health 53 → 50 (-2.7)
  • Architecture 80 → 80 (+0.1)
  • Maturity 49 → 52 (+3.7)
  • Readiness 28 → 28 (+0.2)
  • Security 67 → 38 (-29.6)
  • Performance 56 → 56 (+0.0)

Resolved (12)

  • Bounded contexts not declared
  • Duplicated block (10 lines × 2) (framework/src/Qf.Core.Web/Authentication/AliPay/AliPayHandler.cs)
  • Duplicated block (13 lines × 2) (framework/src/Qf.Core.Web/Authentication/AliPay/AliPayHandler.cs)
  • Duplicated block (20 lines × 2) (framework/src/Qf.Core.Web/Authentication/AliPay/AliPayHandler.cs)
  • Duplicated block (8 lines × 2) (framework/src/Qf.Extensions.Configuration.Encryption/AES.cs)
  • Inconsistent naming for transaction-related configuration properties. One uses a boolean flag IsTransactional while the other uses IsolationLevel for transaction settings, suggesting a lack of unified naming convention for transaction configuration.
  • LLM evaluation failed
  • LLM evaluation failed
  • Low cohesion: UnitOfWork (LCOM4 4) (framework/src/Qf.Core/Uow/UnitOfWork.cs)
  • Monorepo: only 1 of 3 solutions was scored
  • Scanner failed to run — not a clean result
  • dormant codebase — no living knowledge left to concentrate

New (29)

  • AliPayHandler.HandleRemoteAuthenticateAsync (cognitive 19) (framework/src/Qf.Core.Web/Authentication/AliPay/AliPayHandler.cs)
  • Ambiguous naming for distinct endpoints. 'AuthorizationEndpoint2' is a poor name that suggests a version or a secondary endpoint without clear semantic meaning, unlike standard OAuth2 flows which typically have distinct names like 'AuthorizationEndpoint' and 'TokenEndpoint'.
  • BearerAuthorizeAttribute.OnAuthorizationAsync (cognitive 18) (framework/src/Qf.Core.Web/Authorization/BearerAuthorizeAttribute.cs)
  • DelayQueue.Read (cognitive 16) (framework/src/Qf.Core/DelayQueues/DelayQueue.cs)
  • Duplicated block (10 lines × 2) (framework/src/Qf.Extensions.Configuration.Encryption/AES.cs)
  • Duplicated block (27 lines × 2) (framework/src/Qf.Core.Web/Authentication/AliPay/AliPayHandler.cs)
  • Duplicated block (45 lines × 2) (framework/src/Qf.Core.Web/Authentication/AliPay/CachedPropertiesDataFormat.cs)
  • Duplicated block (84 lines × 2) (framework/src/Qf.Core.Web/Authentication/AliPay/AliPayHandler.cs)
  • EmptyCatchBlock (framework/src/Qf.Core.AutoMapper/DefaultObjectMapper.cs)
  • End-of-life runtime: .NET net5.0
  • High IaC: WD-DOCKER-0013 (gateway/Qf.APIGateway/Dockerfile)
  • High IaC: WD-DOCKER-0013 (gateway/Qf.APIGateway/Dockerfile)
  • Inconsistent naming convention for secondary/alternative configurations. Using '2' suffixes (AuthorizationEndpoint2, Scope2) is non-standard and confusing compared to descriptive suffixes (e.g., 'MiniProgram', 'Web', 'App').
  • Medium IaC: WD-DOCKER-0003 (gateway/Qf.APIGateway/Dockerfile)
  • Medium IaC: WD-DOCKER-0003 (gateway/Qf.APIGateway/Dockerfile)
  • Scanner failed to run — not a clean result
  • Scanner failed to run — not a clean result
  • TooManyMethods: UnitOfWork (framework/src/Qf.Core/Uow/UnitOfWork.cs)
  • Violation of standard .NET naming conventions. Standard .NET extension methods for caching (like those in Microsoft.Extensions.Caching.Memory or StackExchange.Redis) typically use 'Get' for the operation and rely on the return type (Task<T> vs T) or explicit 'Async' suffixes. While 'GetObject' is descriptive, it duplicates the intent of 'Get' combined with serialization logic that should ideally be handled by the serializer or a generic wrapper, making the API surface bloated with 'Object' variants when generic 'Get<T>' already exists.
  • WeChatHandler.HandleRemoteAuthenticateAsync (cognitive 19) (framework/src/Qf.Core.Web/Authentication/WeChat/WeChatHandler.cs)
  • …and 9 more

API surface

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

ren8179/Qf.Core 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 d219a13829c3bab418b850a375aac8a4fdd271e7 — 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.