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; }