using System.Collections.Immutable; namespace StellaOps.Notify.WebService.Contracts; /// /// Request to create or update a quiet hours schedule. /// public sealed class QuietHoursUpsertRequest { public required string Name { get; init; } public required string CronExpression { get; init; } public required TimeSpan Duration { get; init; } public required string TimeZone { get; init; } public string? ChannelId { get; init; } public bool? Enabled { get; init; } public string? Description { get; init; } public ImmutableDictionary? Metadata { get; init; } } /// /// Request to create or update a maintenance window. /// public sealed class MaintenanceWindowUpsertRequest { public required string Name { get; init; } public required DateTimeOffset StartsAt { get; init; } public required DateTimeOffset EndsAt { get; init; } public bool? SuppressNotifications { get; init; } public string? Reason { get; init; } public ImmutableArray ChannelIds { get; init; } = []; public ImmutableArray RuleIds { get; init; } = []; public ImmutableDictionary? Metadata { get; init; } } /// /// Request to create or update a throttle configuration. /// public sealed class ThrottleConfigUpsertRequest { public required string Name { get; init; } public required TimeSpan DefaultWindow { get; init; } public int? MaxNotificationsPerWindow { get; init; } public string? ChannelId { get; init; } public bool? IsDefault { get; init; } public bool? Enabled { get; init; } public string? Description { get; init; } public ImmutableDictionary? Metadata { get; init; } } /// /// Request to create an operator override. /// public sealed class OperatorOverrideCreateRequest { public required string OverrideType { get; init; } public required DateTimeOffset ExpiresAt { get; init; } public string? ChannelId { get; init; } public string? RuleId { get; init; } public string? Reason { get; init; } }