< Summary

Information
Class: ProjectTemplate.Infrastructure.Data.Auditing.ApplicationAuditCompletionOutboxQueryRequest
Assembly: ProjectTemplate.Infrastructure
File(s): /home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Infrastructure/Data/Auditing/ApplicationAuditCompletionOutboxContracts.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 5
Coverable lines: 5
Total lines: 207
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_Status()100%210%
get_Destination()100%210%
get_MutationBatchId()100%210%
get_MaximumResults()100%210%

File(s)

/home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Infrastructure/Data/Auditing/ApplicationAuditCompletionOutboxContracts.cs

#LineLine coverage
 1using ProjectTemplate.Infrastructure.Data.Entities;
 2
 3namespace ProjectTemplate.Infrastructure.Data.Auditing;
 4
 5/// <summary>
 6/// Identifies durable audit-completion delivery states.
 7/// </summary>
 8public static class ApplicationAuditCompletionOutboxStatuses
 9{
 10    public const string Pending = "Pending";
 11    public const string Delivered = "Delivered";
 12    public const string RetryableFailure = "RetryableFailure";
 13    public const string Failed = "Failed";
 14    public const string Deferred = "Deferred";
 15    public const string DeadLettered = "DeadLettered";
 16}
 17
 18/// <summary>
 19/// Configures the optional durable audit-completion outbox and dispatcher.
 20/// </summary>
 21public sealed class ApplicationAuditCompletionOutboxOptions
 22{
 23    public bool Enabled { get; set; } = true;
 24
 25    public string DefaultDestination { get; set; } = "default";
 26
 27    public int BatchSize { get; set; } = 25;
 28
 29    public TimeSpan PollInterval { get; set; } = TimeSpan.FromSeconds(5);
 30
 31    public TimeSpan BaseRetryDelay { get; set; } = TimeSpan.FromSeconds(5);
 32
 33    public TimeSpan MaxRetryDelay { get; set; } = TimeSpan.FromMinutes(5);
 34
 35    public TimeSpan DeferredRetryDelay { get; set; } = TimeSpan.FromMinutes(1);
 36
 37    public int MaxRetryAttempts { get; set; } = 5;
 38
 39    public int MaxErrorDetailLength { get; set; } = 512;
 40}
 41
 42/// <summary>
 43/// Stages minimized audit-completion receipts in the application database.
 44/// </summary>
 45public interface IApplicationAuditCompletionOutbox
 46{
 47    ApplicationAuditCompletionOutboxEntry? Stage(
 48        ApplicationDbContext dbContext,
 49        ApplicationMutationAuditReceipt receipt,
 50        string? destination = null);
 51
 52    ValueTask<ApplicationAuditCompletionOutboxEntry?> StageAsync(
 53        ApplicationDbContext dbContext,
 54        ApplicationMutationAuditReceipt receipt,
 55        string? destination = null,
 56        CancellationToken cancellationToken = default);
 57}
 58
 59/// <summary>
 60/// Publishes one minimized audit-completion message to a host-owned destination.
 61/// </summary>
 62public interface IApplicationAuditCompletionPublisher
 63{
 64    string Destination { get; }
 65
 66    ValueTask<ApplicationAuditCompletionPublishResult> PublishAsync(
 67        ApplicationAuditCompletionMessage message,
 68        CancellationToken cancellationToken = default);
 69}
 70
 71/// <summary>
 72/// Dispatches ready durable audit-completion entries after their business transaction commits.
 73/// </summary>
 74public interface IApplicationAuditCompletionOutboxDispatcher
 75{
 76    Task<ApplicationAuditCompletionDispatchSummary> DispatchReadyAsync(
 77        CancellationToken cancellationToken = default);
 78}
 79
 80/// <summary>
 81/// Exposes minimized operational status and query projections for the durable outbox.
 82/// </summary>
 83public interface IApplicationAuditCompletionOutboxQuery
 84{
 85    Task<ApplicationAuditCompletionOutboxHealth> GetHealthAsync(
 86        CancellationToken cancellationToken = default);
 87
 88    Task<IReadOnlyList<ApplicationAuditCompletionOutboxItem>> QueryAsync(
 89        ApplicationAuditCompletionOutboxQueryRequest request,
 90        CancellationToken cancellationToken = default);
 91}
 92
 93public enum ApplicationAuditCompletionPublishDisposition
 94{
 95    Delivered,
 96    RetryableFailure,
 97    Failed,
 98    Deferred
 99}
 100
 101public sealed record ApplicationAuditCompletionPublishResult(
 102    ApplicationAuditCompletionPublishDisposition Disposition,
 103    string? ErrorCode = null,
 104    string? ErrorMessage = null,
 105    TimeSpan? RetryAfter = null)
 106{
 107    public static ApplicationAuditCompletionPublishResult Success()
 108    {
 109        return new(ApplicationAuditCompletionPublishDisposition.Delivered);
 110    }
 111
 112    public static ApplicationAuditCompletionPublishResult Retry(
 113        string? errorCode = null,
 114        string? errorMessage = null,
 115        TimeSpan? retryAfter = null)
 116    {
 117        return new(
 118            ApplicationAuditCompletionPublishDisposition.RetryableFailure,
 119            errorCode,
 120            errorMessage,
 121            retryAfter);
 122    }
 123
 124    public static ApplicationAuditCompletionPublishResult TerminalFailure(
 125        string? errorCode = null,
 126        string? errorMessage = null)
 127    {
 128        return new(ApplicationAuditCompletionPublishDisposition.Failed, errorCode, errorMessage);
 129    }
 130
 131    public static ApplicationAuditCompletionPublishResult Defer(
 132        string? errorCode = null,
 133        string? errorMessage = null,
 134        TimeSpan? retryAfter = null)
 135    {
 136        return new(
 137            ApplicationAuditCompletionPublishDisposition.Deferred,
 138            errorCode,
 139            errorMessage,
 140            retryAfter);
 141    }
 142}
 143
 144public sealed record ApplicationAuditCompletionMessage(
 145    string SchemaVersion,
 146    string Destination,
 147    string IdempotencyKey,
 148    string MutationBatchId,
 149    int AuditRecordCount,
 150    string PersistenceOutcome,
 151    DateTime ReceiptCompletedUtc,
 152    string MutationManifestHash,
 153    string MutationManifestAlgorithm,
 154    string MutationManifestSchemaVersion,
 155    string? OperationExecutionId,
 156    string? ExecutionAttemptId,
 157    string? DecisionAuditRecordId,
 158    string? CorrelationId,
 159    string? TraceId);
 160
 161public sealed record ApplicationAuditCompletionDispatchSummary(
 162    bool Enabled,
 163    int AttemptedCount,
 164    int DeliveredCount,
 165    int RetryScheduledCount,
 166    int FailedCount,
 167    int DeferredCount,
 168    int DeadLetteredCount);
 169
 170public sealed record ApplicationAuditCompletionOutboxHealth(
 171    bool Enabled,
 172    long BacklogCount,
 173    TimeSpan? OldestPendingAge,
 174    long TotalRetryCount,
 175    long DeadLetterCount);
 176
 0177public sealed record ApplicationAuditCompletionOutboxQueryRequest(
 0178    string? Status = null,
 0179    string? Destination = null,
 0180    string? MutationBatchId = null,
 0181    int MaximumResults = 100);
 182
 183public sealed record ApplicationAuditCompletionOutboxItem(
 184    Guid Id,
 185    string SchemaVersion,
 186    string Destination,
 187    string IdempotencyKey,
 188    string MutationBatchId,
 189    int AuditRecordCount,
 190    string PersistenceOutcome,
 191    DateTime ReceiptCompletedUtc,
 192    string MutationManifestHash,
 193    string MutationManifestAlgorithm,
 194    string MutationManifestSchemaVersion,
 195    string? OperationExecutionId,
 196    string? ExecutionAttemptId,
 197    string? DecisionAuditRecordId,
 198    string? CorrelationId,
 199    string? TraceId,
 200    string Status,
 201    int RetryCount,
 202    DateTime CreatedUtc,
 203    DateTime? LastAttemptUtc,
 204    DateTime? NextAttemptUtc,
 205    DateTime? DeliveredUtc,
 206    string? LastErrorCode,
 207    string? LastErrorMessage);