diff --git a/DysonNetwork.Ring/Notification/NotificationController.cs b/DysonNetwork.Ring/Notification/NotificationController.cs index 634652f3..10673987 100644 --- a/DysonNetwork.Ring/Notification/NotificationController.cs +++ b/DysonNetwork.Ring/Notification/NotificationController.cs @@ -147,20 +147,21 @@ public class NotificationController( [FromQuery] bool save = false ) { - await nty.SendNotificationBatch( - new SnNotification - { - CreatedAt = SystemClock.Instance.GetCurrentInstant(), - UpdatedAt = SystemClock.Instance.GetCurrentInstant(), - Topic = request.Topic, - Title = request.Title, - Subtitle = request.Subtitle, - Content = request.Content, - Meta = request.Meta ?? [], - }, - request.AccountId, - save - ); + var notification = new SnNotification + { + CreatedAt = SystemClock.Instance.GetCurrentInstant(), + UpdatedAt = SystemClock.Instance.GetCurrentInstant(), + Topic = request.Topic, + Title = request.Title, + Subtitle = request.Subtitle, + Content = request.Content, + }; + if (request.Meta != null) + { + notification.Meta = request.Meta; + } + + await nty.SendNotificationBatch(notification, request.AccountId, save); return Ok(); } -} \ No newline at end of file +} diff --git a/DysonNetwork.Ring/Notification/PushService.cs b/DysonNetwork.Ring/Notification/PushService.cs index 8c78d16f..9d804277 100644 --- a/DysonNetwork.Ring/Notification/PushService.cs +++ b/DysonNetwork.Ring/Notification/PushService.cs @@ -251,18 +251,29 @@ public class PushService notification.Meta ); - // WS first + // Send to each account foreach (var account in accounts) { notification.AccountId = account; + + // WebSocket WebSocketService.SendPacketToAccount(account, new WebSocketPacket { Type = "notifications.new", Data = notification }); - } - await DeliverPushNotification(notification); + // Push notifications + var subscriptions = await _db.PushSubscriptions + .Where(s => s.AccountId == account) + .ToListAsync(); + + if (subscriptions.Count > 0) + { + var tasks = subscriptions.Select(sub => SendPushNotificationAsync(sub, notification)).ToList(); + await Task.WhenAll(tasks); + } + } } private async Task SendPushNotificationAsync(SnNotificationPushSubscription subscription, @@ -391,4 +402,4 @@ public class PushService })); await _db.SaveChangesAsync(); } -} \ No newline at end of file +}