feat(platform): harden governance and approval workflows
Some checks failed
ci / release-gate (push) Has been cancelled

This commit is contained in:
2026-08-03 11:43:07 +08:00
parent fe594c9ef5
commit 290a0c7bd7
65 changed files with 48479 additions and 229 deletions

View File

@@ -4,6 +4,7 @@ using Tiku.Api.Contracts;
using Tiku.Application.Jobs;
using Tiku.Application.Security;
using Tiku.Domain.Operations;
using Tiku.Domain.Platform;
using Tiku.Application.Assets;
using Tiku.Application.Storage;
using Tiku.Infrastructure.Persistence;
@@ -119,6 +120,26 @@ public sealed class PlatformOperationsController(
});
}
[HttpGet("governance-metrics")]
[EndpointSummary("查询审批、配置与通知治理指标")]
public async Task<ActionResult<object>> GovernanceMetrics(CancellationToken cancellationToken)
{
var now = DateTimeOffset.UtcNow;
var approvalCounts = await dbContext.PlatformApprovalRequests.AsNoTracking()
.GroupBy(item => item.Status)
.Select(group => new { status = group.Key, count = group.Count() })
.ToArrayAsync(cancellationToken);
var expiredPending = await dbContext.PlatformApprovalRequests.AsNoTracking()
.CountAsync(item => item.Status == PlatformApprovalRequestStatus.Pending && item.ExpiresAt <= now, cancellationToken);
var configurationDrafts = await dbContext.PlatformConfigurationVersions.AsNoTracking()
.CountAsync(item => item.Status == PlatformConfigurationVersionStatus.Draft, cancellationToken);
var notificationCounts = await dbContext.PlatformNotificationDeliveries.AsNoTracking()
.GroupBy(item => item.Status)
.Select(group => new { status = group.Key, count = group.Count() })
.ToArrayAsync(cancellationToken);
return Ok(new { approvals = approvalCounts, expiredPending, configurationDrafts, notifications = notificationCounts, checkedAt = now });
}
[HttpGet("jobs")]
[EndpointSummary("查询全平台后台任务")]
public async Task<ActionResult<IReadOnlyCollection<BackgroundJobItem>>> Jobs(