using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Sozsoft.Notifications.Domain;
///
/// Yeni uretilen bildirimleri acik istemcilere aninda duyurur. Sunum kanalidir (SignalR), bu
/// yuzden gerceklemesi Application katmanindadir; uretim tarafi yalnizca bu sozlesmeyi bilir.
///
public interface INotificationRealtimeNotifier
{
/// Duyuru kayit yazildiktan sonra yapilir; iletim basarisiz olursa uretim etkilenmez.
Task NotifyAsync(IReadOnlyCollection deliveries);
}
/// Bildirimin sahibi; duyuru yalnizca bu kullanicinin baglantilarina gider.
/// Kanal adi; istemci hangi gosterimi yapacagina buna bakarak karar verir.
public sealed record NotificationDelivery(Guid UserId, string Channel);
///
/// Gercek zamanli duyuru yalnizca web sunucusunda anlamlidir. SignalR olmayan barindirmalarda
/// (DbMigrator, testler) bu varsayilan kullanilir; Application katmani kendi gerceklemesiyle
/// bunun yerine gecer.
///
public class NullNotificationRealtimeNotifier : INotificationRealtimeNotifier, ITransientDependency
{
public Task NotifyAsync(IReadOnlyCollection deliveries) => Task.CompletedTask;
}