- Delete dead Notify Worker (NoOp handler) - Move 51 source files (endpoints, contracts, services, compat stores) - Transform namespaces from Notifier.WebService to Notify.WebService - Update DI registrations, WebSocket support, v2 endpoint mapping - Comment out notifier-web in compose, update gateway routes - Update architecture docs, port registry, rollout matrix - Notifier Worker stays as separate delivery engine container Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
144 lines
4.3 KiB
C#
144 lines
4.3 KiB
C#
namespace StellaOps.Notify.WebService.Contracts;
|
|
|
|
/// <summary>
|
|
/// Retention policy configuration request/response.
|
|
/// </summary>
|
|
public sealed record RetentionPolicyDto
|
|
{
|
|
/// <summary>
|
|
/// Retention period for delivery records in days.
|
|
/// </summary>
|
|
public int DeliveryRetentionDays { get; init; } = 90;
|
|
|
|
/// <summary>
|
|
/// Retention period for audit log entries in days.
|
|
/// </summary>
|
|
public int AuditRetentionDays { get; init; } = 365;
|
|
|
|
/// <summary>
|
|
/// Retention period for dead-letter entries in days.
|
|
/// </summary>
|
|
public int DeadLetterRetentionDays { get; init; } = 30;
|
|
|
|
/// <summary>
|
|
/// Retention period for storm tracking data in days.
|
|
/// </summary>
|
|
public int StormDataRetentionDays { get; init; } = 7;
|
|
|
|
/// <summary>
|
|
/// Retention period for inbox messages in days.
|
|
/// </summary>
|
|
public int InboxRetentionDays { get; init; } = 30;
|
|
|
|
/// <summary>
|
|
/// Retention period for event history in days.
|
|
/// </summary>
|
|
public int EventHistoryRetentionDays { get; init; } = 30;
|
|
|
|
/// <summary>
|
|
/// Whether automatic cleanup is enabled.
|
|
/// </summary>
|
|
public bool AutoCleanupEnabled { get; init; } = true;
|
|
|
|
/// <summary>
|
|
/// Cron expression for automatic cleanup schedule.
|
|
/// </summary>
|
|
public string CleanupSchedule { get; init; } = "0 2 * * *";
|
|
|
|
/// <summary>
|
|
/// Maximum records to delete per cleanup run.
|
|
/// </summary>
|
|
public int MaxDeletesPerRun { get; init; } = 10000;
|
|
|
|
/// <summary>
|
|
/// Whether to keep resolved/acknowledged deliveries longer.
|
|
/// </summary>
|
|
public bool ExtendResolvedRetention { get; init; } = true;
|
|
|
|
/// <summary>
|
|
/// Extension multiplier for resolved items.
|
|
/// </summary>
|
|
public double ResolvedRetentionMultiplier { get; init; } = 2.0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Request to update retention policy.
|
|
/// </summary>
|
|
public sealed record UpdateRetentionPolicyRequest
|
|
{
|
|
public required RetentionPolicyDto Policy { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Response for retention policy operations.
|
|
/// </summary>
|
|
public sealed record RetentionPolicyResponse
|
|
{
|
|
public required string TenantId { get; init; }
|
|
public required RetentionPolicyDto Policy { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Response for retention cleanup execution.
|
|
/// </summary>
|
|
public sealed record RetentionCleanupResponse
|
|
{
|
|
public required string TenantId { get; init; }
|
|
public required bool Success { get; init; }
|
|
public string? Error { get; init; }
|
|
public required DateTimeOffset ExecutedAt { get; init; }
|
|
public required double DurationMs { get; init; }
|
|
public required RetentionCleanupCountsDto Counts { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cleanup counts DTO.
|
|
/// </summary>
|
|
public sealed record RetentionCleanupCountsDto
|
|
{
|
|
public int Deliveries { get; init; }
|
|
public int AuditEntries { get; init; }
|
|
public int DeadLetterEntries { get; init; }
|
|
public int StormData { get; init; }
|
|
public int InboxMessages { get; init; }
|
|
public int Events { get; init; }
|
|
public int Total { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Response for cleanup preview.
|
|
/// </summary>
|
|
public sealed record RetentionCleanupPreviewResponse
|
|
{
|
|
public required string TenantId { get; init; }
|
|
public required DateTimeOffset PreviewedAt { get; init; }
|
|
public required RetentionCleanupCountsDto EstimatedCounts { get; init; }
|
|
public required RetentionPolicyDto PolicyApplied { get; init; }
|
|
public required IReadOnlyDictionary<string, DateTimeOffset> CutoffDates { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Response for last cleanup execution.
|
|
/// </summary>
|
|
public sealed record RetentionCleanupExecutionResponse
|
|
{
|
|
public required string ExecutionId { get; init; }
|
|
public required string TenantId { get; init; }
|
|
public required DateTimeOffset StartedAt { get; init; }
|
|
public DateTimeOffset? CompletedAt { get; init; }
|
|
public required string Status { get; init; }
|
|
public RetentionCleanupCountsDto? Counts { get; init; }
|
|
public string? Error { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Response for cleanup all tenants.
|
|
/// </summary>
|
|
public sealed record RetentionCleanupAllResponse
|
|
{
|
|
public required IReadOnlyList<RetentionCleanupResponse> Results { get; init; }
|
|
public required int SuccessCount { get; init; }
|
|
public required int FailureCount { get; init; }
|
|
public required int TotalDeleted { get; init; }
|
|
}
|