namespace StellaOps.Notify.WebService.Contracts;
///
/// Retention policy configuration request/response.
///
public sealed record RetentionPolicyDto
{
///
/// Retention period for delivery records in days.
///
public int DeliveryRetentionDays { get; init; } = 90;
///
/// Retention period for audit log entries in days.
///
public int AuditRetentionDays { get; init; } = 365;
///
/// Retention period for dead-letter entries in days.
///
public int DeadLetterRetentionDays { get; init; } = 30;
///
/// Retention period for storm tracking data in days.
///
public int StormDataRetentionDays { get; init; } = 7;
///
/// Retention period for inbox messages in days.
///
public int InboxRetentionDays { get; init; } = 30;
///
/// Retention period for event history in days.
///
public int EventHistoryRetentionDays { get; init; } = 30;
///
/// Whether automatic cleanup is enabled.
///
public bool AutoCleanupEnabled { get; init; } = true;
///
/// Cron expression for automatic cleanup schedule.
///
public string CleanupSchedule { get; init; } = "0 2 * * *";
///
/// Maximum records to delete per cleanup run.
///
public int MaxDeletesPerRun { get; init; } = 10000;
///
/// Whether to keep resolved/acknowledged deliveries longer.
///
public bool ExtendResolvedRetention { get; init; } = true;
///
/// Extension multiplier for resolved items.
///
public double ResolvedRetentionMultiplier { get; init; } = 2.0;
}
///
/// Request to update retention policy.
///
public sealed record UpdateRetentionPolicyRequest
{
public required RetentionPolicyDto Policy { get; init; }
}
///
/// Response for retention policy operations.
///
public sealed record RetentionPolicyResponse
{
public required string TenantId { get; init; }
public required RetentionPolicyDto Policy { get; init; }
}
///
/// Response for retention cleanup execution.
///
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; }
}
///
/// Cleanup counts DTO.
///
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; }
}
///
/// Response for cleanup preview.
///
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 CutoffDates { get; init; }
}
///
/// Response for last cleanup execution.
///
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; }
}
///
/// Response for cleanup all tenants.
///
public sealed record RetentionCleanupAllResponse
{
public required IReadOnlyList Results { get; init; }
public required int SuccessCount { get; init; }
public required int FailureCount { get; init; }
public required int TotalDeleted { get; init; }
}