Files
tiku-backend.net/Tiku.Application/PlatformAdmin/PlatformGovernanceModels.cs
xiong c497a3ca8d
Some checks failed
ci / release-gate (push) Has been cancelled
清理代码
2026-08-03 12:31:39 +08:00

125 lines
4.4 KiB
C#

using System.Text.Json;
using Tiku.Domain.Platform;
namespace Tiku.Application.PlatformAdmin;
public sealed record PagedQuery(
int Page = 1,
int PageSize = 50,
string? Search = null,
string? SortBy = null,
bool Descending = true)
{
public int SafePage => Math.Max(1, Page);
public int SafePageSize => Math.Clamp(PageSize, 1, 200);
}
public sealed record PagedResult<T>(IReadOnlyCollection<T> Items, int Total, int Page, int PageSize);
public sealed record PlatformConfigurationDefinitionItem(
Guid Id,
string Code,
string Name,
string Category,
PlatformConfigurationValueType ValueType,
bool AllowRuntimeManagement,
bool IsSensitive,
string? Description,
JsonElement ValidationSchema);
public sealed record PlatformConfigurationVersionItem(
Guid Id,
Guid DefinitionId,
string Environment,
int Version,
PlatformConfigurationVersionStatus Status,
JsonElement? Value,
string? SecretRef,
Guid CreatedBy,
Guid? PublishedBy,
Guid? RolledBackFromVersionId,
string Reason,
DateTimeOffset? PublishedAt,
DateTimeOffset CreatedAt);
public sealed record SavePlatformConfigurationDraftCommand(
string DefinitionCode,
string Environment,
JsonElement? Value,
string? SecretRef,
string Reason);
public sealed record PlatformNotificationTemplateItem(
Guid Id,
string Code,
string Name,
PlatformNotificationChannel Channel,
string SubjectTemplate,
string BodyTemplate,
bool Enabled,
JsonElement Variables,
DateTimeOffset UpdatedAt);
public sealed record UpsertPlatformNotificationTemplateCommand(
Guid? Id,
string Code,
string Name,
PlatformNotificationChannel Channel,
string SubjectTemplate,
string BodyTemplate,
bool Enabled,
JsonElement Variables);
public sealed record SendPlatformNotificationCommand(
Guid TemplateId,
IReadOnlyCollection<string> RoleCodes,
IReadOnlyDictionary<string, string> Variables,
string IdempotencyKey);
public sealed record PlatformNotificationDeliveryItem(
Guid Id,
Guid TemplateId,
Guid RecipientUserId,
string RecipientRoleCode,
PlatformNotificationChannel Channel,
PlatformNotificationDeliveryStatus Status,
string Subject,
string Body,
int Attempts,
string? LastError,
DateTimeOffset? SentAt,
DateTimeOffset CreatedAt);
public interface IPlatformGovernanceService
{
Task<IReadOnlyCollection<PlatformConfigurationDefinitionItem>> GetConfigurationDefinitionsAsync(
PlatformApprovalActor actor, CancellationToken cancellationToken = default);
Task<IReadOnlyCollection<PlatformConfigurationVersionItem>> GetConfigurationVersionsAsync(
PlatformApprovalActor actor, string definitionCode, string? environment,
CancellationToken cancellationToken = default);
Task<PlatformConfigurationVersionItem> SaveConfigurationDraftAsync(PlatformApprovalActor actor,
SavePlatformConfigurationDraftCommand command, CancellationToken cancellationToken = default);
Task<PlatformConfigurationVersionItem> PublishConfigurationAsync(PlatformApprovalActor actor, Guid versionId,
CancellationToken cancellationToken = default);
Task<PlatformConfigurationVersionItem> RollbackConfigurationAsync(PlatformApprovalActor actor, Guid versionId,
string reason, CancellationToken cancellationToken = default);
Task<PagedResult<PlatformNotificationDeliveryItem>> GetNotificationDeliveriesAsync(PlatformApprovalActor actor,
PagedQuery query, PlatformNotificationDeliveryStatus? status, CancellationToken cancellationToken = default);
Task<IReadOnlyCollection<PlatformNotificationTemplateItem>> GetNotificationTemplatesAsync(
PlatformApprovalActor actor, CancellationToken cancellationToken = default);
Task<PlatformNotificationTemplateItem> UpsertNotificationTemplateAsync(PlatformApprovalActor actor,
UpsertPlatformNotificationTemplateCommand command, CancellationToken cancellationToken = default);
Task<IReadOnlyCollection<PlatformNotificationDeliveryItem>> SendNotificationAsync(PlatformApprovalActor actor,
SendPlatformNotificationCommand command, CancellationToken cancellationToken = default);
Task<PlatformNotificationDeliveryItem> RetryNotificationAsync(PlatformApprovalActor actor, Guid deliveryId,
CancellationToken cancellationToken = default);
}