feat(sms): NotificationListForm adapter-gated Type selector + per-type recipients (S7)
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
using ZB.MOM.WW.ScadaBridge.Commons.Types.Enums;
|
||||
using ZB.MOM.WW.ScadaBridge.NotificationOutbox.Delivery;
|
||||
|
||||
namespace ZB.MOM.WW.ScadaBridge.CentralUI.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Default <see cref="INotificationChannelCatalog"/> that derives the supported channels
|
||||
/// from the registered <see cref="INotificationDeliveryAdapter"/> set. The central Host
|
||||
/// registers the Email + SMS adapters (see <c>AddNotificationOutbox</c>) into the same DI
|
||||
/// container that hosts the Central UI, so projecting each adapter's
|
||||
/// <see cref="INotificationDeliveryAdapter.Type"/> yields exactly the channels the central
|
||||
/// node can actually deliver — no hardcoded <c>{Email, Sms}</c> list to drift.
|
||||
/// </summary>
|
||||
public sealed class NotificationChannelCatalog : INotificationChannelCatalog
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes the catalog from the registered delivery adapters, snapshotting the
|
||||
/// distinct channel set once (the adapter registrations are fixed for the process
|
||||
/// lifetime). Ordering follows the <see cref="NotificationType"/> enum so the UI Type
|
||||
/// selector renders in a stable order regardless of adapter registration order.
|
||||
/// </summary>
|
||||
/// <param name="adapters">The registered delivery adapters (one per channel).</param>
|
||||
public NotificationChannelCatalog(IEnumerable<INotificationDeliveryAdapter> adapters)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(adapters);
|
||||
|
||||
SupportedChannels = adapters
|
||||
.Select(a => a.Type)
|
||||
.Distinct()
|
||||
.OrderBy(t => (int)t)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyList<NotificationType> SupportedChannels { get; }
|
||||
}
|
||||
Reference in New Issue
Block a user