From 3035abfa3077b989486fd279a828075e03f0c194 Mon Sep 17 00:00:00 2001 From: Maciej Zieniuk Date: Tue, 22 Oct 2024 18:27:18 +0100 Subject: [PATCH] PM-10600: Revert global push notifications --- src/Api/Controllers/PushController.cs | 7 +---- .../Api/Request/PushSendRequestModel.cs | 3 +- src/Core/Models/PushNotification.cs | 1 - src/Core/Services/IPushNotificationService.cs | 3 -- .../AzureQueuePushNotificationService.cs | 4 --- .../MultiServicePushNotificationService.cs | 7 ----- .../NotificationHubPushNotificationService.cs | 25 +---------------- ...NotificationsApiPushNotificationService.cs | 4 --- .../RelayPushNotificationService.cs | 28 +------------------ .../NoopPushNotificationService.cs | 3 -- src/Notifications/HubHelpers.cs | 16 +---------- src/Notifications/NotificationsHub.cs | 24 ++++------------ 12 files changed, 10 insertions(+), 115 deletions(-) diff --git a/src/Api/Controllers/PushController.cs b/src/Api/Controllers/PushController.cs index 6f0274e1a2..ca6ab3481b 100644 --- a/src/Api/Controllers/PushController.cs +++ b/src/Api/Controllers/PushController.cs @@ -72,12 +72,7 @@ public class PushController : Controller { CheckUsage(); - if (model.Global) - { - await _pushNotificationService.SendPayloadToEveryoneAsync(model.Type, model.Payload, - Prefix(model.Identifier), Prefix(model.DeviceId), model.ClientType); - } - else if (!string.IsNullOrWhiteSpace(model.UserId)) + if (!string.IsNullOrWhiteSpace(model.UserId)) { await _pushNotificationService.SendPayloadToUserAsync(Prefix(model.UserId), model.Type, model.Payload, Prefix(model.Identifier), Prefix(model.DeviceId), model.ClientType); diff --git a/src/Core/Models/Api/Request/PushSendRequestModel.cs b/src/Core/Models/Api/Request/PushSendRequestModel.cs index 4b982ed73f..50890cb277 100644 --- a/src/Core/Models/Api/Request/PushSendRequestModel.cs +++ b/src/Core/Models/Api/Request/PushSendRequestModel.cs @@ -12,12 +12,11 @@ public class PushSendRequestModel : IValidatableObject public string? Identifier { get; set; } [Required] public PushType Type { get; set; } [Required] public object Payload { get; set; } = null!; - public bool Global { get; set; } public ClientType? ClientType { get; set; } public IEnumerable Validate(ValidationContext validationContext) { - if (string.IsNullOrWhiteSpace(UserId) && string.IsNullOrWhiteSpace(OrganizationId) && !Global) + if (string.IsNullOrWhiteSpace(UserId) && string.IsNullOrWhiteSpace(OrganizationId)) { yield return new ValidationResult($"{nameof(UserId)} or {nameof(OrganizationId)} is required."); } diff --git a/src/Core/Models/PushNotification.cs b/src/Core/Models/PushNotification.cs index cf7fc850bb..f8dc7acb8a 100644 --- a/src/Core/Models/PushNotification.cs +++ b/src/Core/Models/PushNotification.cs @@ -48,7 +48,6 @@ public class SyncSendPushNotification public class SyncNotificationPushNotification { public Guid Id { get; set; } - public bool Global { get; set; } public Guid? UserId { get; set; } public Guid? OrganizationId { get; set; } public ClientType ClientType { get; set; } diff --git a/src/Core/Services/IPushNotificationService.cs b/src/Core/Services/IPushNotificationService.cs index 53744041fa..9cf8f4f876 100644 --- a/src/Core/Services/IPushNotificationService.cs +++ b/src/Core/Services/IPushNotificationService.cs @@ -32,7 +32,4 @@ public interface IPushNotificationService Task SendPayloadToOrganizationAsync(string orgId, PushType type, object payload, string identifier, string deviceId = null, ClientType? clientType = null); - - Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, string deviceId = null, - ClientType? clientType = null); } diff --git a/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs b/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs index 404bbd00b1..44cb56d806 100644 --- a/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs +++ b/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs @@ -171,7 +171,6 @@ public class AzureQueuePushNotificationService : IPushNotificationService var message = new SyncNotificationPushNotification { Id = notification.Id, - Global = notification.Global, UserId = notification.UserId, OrganizationId = notification.OrganizationId, ClientType = notification.ClientType, @@ -229,7 +228,4 @@ public class AzureQueuePushNotificationService : IPushNotificationService // Noop return Task.FromResult(0); } - - public Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, string deviceId = null, - ClientType? clientType = null) => Task.CompletedTask; } diff --git a/src/Core/Services/Implementations/MultiServicePushNotificationService.cs b/src/Core/Services/Implementations/MultiServicePushNotificationService.cs index a92ba3e3d7..2c20c100dd 100644 --- a/src/Core/Services/Implementations/MultiServicePushNotificationService.cs +++ b/src/Core/Services/Implementations/MultiServicePushNotificationService.cs @@ -184,13 +184,6 @@ public class MultiServicePushNotificationService : IPushNotificationService return Task.CompletedTask; } - public Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, string deviceId = null, - ClientType? clientType = null) - { - PushToServices((s) => s.SendPayloadToEveryoneAsync(type, payload, identifier, deviceId, clientType)); - return Task.CompletedTask; - } - private void PushToServices(Func pushFunc) { if (_services != null) diff --git a/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs b/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs index 7c0d563fa1..e9e247ecd4 100644 --- a/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs +++ b/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs @@ -199,18 +199,13 @@ public class NotificationHubPushNotificationService : IPushNotificationService var message = new SyncNotificationPushNotification { Id = notification.Id, - Global = notification.Global, UserId = notification.UserId, OrganizationId = notification.OrganizationId, ClientType = notification.ClientType, RevisionDate = notification.RevisionDate }; - if (notification.Global) - { - await SendPayloadToEveryoneAsync(PushType.SyncNotification, message, true, notification.ClientType); - } - else if (notification.UserId.HasValue) + if (notification.UserId.HasValue) { await SendPayloadToUserAsync(notification.UserId.Value, PushType.SyncNotification, message, true, notification.ClientType); @@ -243,13 +238,6 @@ public class NotificationHubPushNotificationService : IPushNotificationService clientType: clientType); } - private async Task SendPayloadToEveryoneAsync(PushType type, object payload, bool excludeCurrentContext, - ClientType? clientType = null) - { - await SendPayloadToEveryoneAsync(type, payload, GetContextIdentifier(excludeCurrentContext), - clientType: clientType); - } - public async Task SendPayloadToUserAsync(string userId, PushType type, object payload, string identifier, string deviceId = null, ClientType? clientType = null) { @@ -272,17 +260,6 @@ public class NotificationHubPushNotificationService : IPushNotificationService } } - public async Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, - string deviceId = null, ClientType? clientType = null) - { - var tag = BuildTag($"template:payload", identifier, clientType); - await SendPayloadAsync(tag, type, payload); - if (InstallationDeviceEntity.IsInstallationDeviceId(deviceId)) - { - await _installationDeviceRepository.UpsertAsync(new InstallationDeviceEntity(deviceId)); - } - } - private string GetContextIdentifier(bool excludeCurrentContext) { if (!excludeCurrentContext) diff --git a/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs b/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs index f9f6ec63be..0d114f88b4 100644 --- a/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs +++ b/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs @@ -178,7 +178,6 @@ public class NotificationsApiPushNotificationService : BaseIdentityClientService var message = new SyncNotificationPushNotification { Id = notification.Id, - Global = notification.Global, UserId = notification.UserId, OrganizationId = notification.OrganizationId, ClientType = notification.ClientType, @@ -235,7 +234,4 @@ public class NotificationsApiPushNotificationService : BaseIdentityClientService // Noop return Task.FromResult(0); } - - public Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, string deviceId = null, - ClientType? clientType = null) => Task.CompletedTask; } diff --git a/src/Core/Services/Implementations/RelayPushNotificationService.cs b/src/Core/Services/Implementations/RelayPushNotificationService.cs index aac39f955f..9d548440bd 100644 --- a/src/Core/Services/Implementations/RelayPushNotificationService.cs +++ b/src/Core/Services/Implementations/RelayPushNotificationService.cs @@ -194,18 +194,13 @@ public class RelayPushNotificationService : BaseIdentityClientService, IPushNoti var message = new SyncNotificationPushNotification { Id = notification.Id, - Global = notification.Global, UserId = notification.UserId, OrganizationId = notification.OrganizationId, ClientType = notification.ClientType, RevisionDate = notification.RevisionDate }; - if (notification.Global) - { - await SendPayloadToEveryoneAsync(PushType.SyncNotification, message, true, notification.ClientType); - } - else if (notification.UserId.HasValue) + if (notification.UserId.HasValue) { await SendPayloadToUserAsync(notification.UserId.Value, PushType.SyncNotification, message, true, notification.ClientType); @@ -247,21 +242,6 @@ public class RelayPushNotificationService : BaseIdentityClientService, IPushNoti await SendAsync(HttpMethod.Post, "push/send", request); } - private async Task SendPayloadToEveryoneAsync(PushType type, object payload, bool excludeCurrentContext, - ClientType? clientType = null) - { - var request = new PushSendRequestModel - { - Global = true, - Type = type, - Payload = payload, - ClientType = clientType - }; - - await AddCurrentContextAsync(request, excludeCurrentContext); - await SendAsync(HttpMethod.Post, "push/send", request); - } - private async Task AddCurrentContextAsync(PushSendRequestModel request, bool addIdentifier) { var currentContext = @@ -292,10 +272,4 @@ public class RelayPushNotificationService : BaseIdentityClientService, IPushNoti { throw new NotImplementedException(); } - - public Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, string deviceId = null, - ClientType? clientType = null) - { - throw new NotImplementedException(); - } } diff --git a/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs b/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs index f6bbb22a18..d55a83c470 100644 --- a/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs +++ b/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs @@ -106,7 +106,4 @@ public class NoopPushNotificationService : IPushNotificationService } public Task PushSyncNotificationAsync(Notification notification) => Task.CompletedTask; - - public Task SendPayloadToEveryoneAsync(PushType type, object payload, string identifier, string deviceId = null, - ClientType? clientType = null) => Task.CompletedTask; } diff --git a/src/Notifications/HubHelpers.cs b/src/Notifications/HubHelpers.cs index a653a7c3ba..25f43138e9 100644 --- a/src/Notifications/HubHelpers.cs +++ b/src/Notifications/HubHelpers.cs @@ -93,21 +93,7 @@ public static class HubHelpers var syncNotification = JsonSerializer.Deserialize>( notificationJson, _deserializerOptions); - if (syncNotification.Payload.Global) - { - if (syncNotification.Payload.ClientType == ClientType.All) - { - await hubContext.Clients.All.SendAsync(_receiveMessageMethod, syncNotification, - cancellationToken); - } - else - { - await hubContext.Clients - .Group(NotificationsHub.GetGlobalGroup(syncNotification.Payload.ClientType)) - .SendAsync(_receiveMessageMethod, syncNotification, cancellationToken); - } - } - else if (syncNotification.Payload.UserId.HasValue) + if (syncNotification.Payload.UserId.HasValue) { if (syncNotification.Payload.ClientType == ClientType.All) { diff --git a/src/Notifications/NotificationsHub.cs b/src/Notifications/NotificationsHub.cs index 77f5c0ec4e..f7e6cc06c4 100644 --- a/src/Notifications/NotificationsHub.cs +++ b/src/Notifications/NotificationsHub.cs @@ -24,14 +24,9 @@ public class NotificationsHub : Microsoft.AspNetCore.SignalR.Hub await currentContext.BuildAsync(Context.User, _globalSettings); var clientType = DeviceTypes.ToClientType(currentContext.DeviceType); - if (clientType != ClientType.All) + if (clientType != ClientType.All && currentContext.UserId.HasValue) { - await Groups.AddToGroupAsync(Context.ConnectionId, GetGlobalGroup(clientType)); - if (currentContext.UserId.HasValue) - { - await Groups.AddToGroupAsync(Context.ConnectionId, - GetUserGroup(currentContext.UserId.Value, clientType)); - } + await Groups.AddToGroupAsync(Context.ConnectionId, GetUserGroup(currentContext.UserId.Value, clientType)); } if (currentContext.Organizations != null) @@ -56,14 +51,10 @@ public class NotificationsHub : Microsoft.AspNetCore.SignalR.Hub await currentContext.BuildAsync(Context.User, _globalSettings); var clientType = DeviceTypes.ToClientType(currentContext.DeviceType); - if (clientType != ClientType.All) + if (clientType != ClientType.All && currentContext.UserId.HasValue) { - await Groups.RemoveFromGroupAsync(Context.ConnectionId, GetGlobalGroup(clientType)); - if (currentContext.UserId.HasValue) - { - await Groups.RemoveFromGroupAsync(Context.ConnectionId, - GetUserGroup(currentContext.UserId.Value, clientType)); - } + await Groups.RemoveFromGroupAsync(Context.ConnectionId, + GetUserGroup(currentContext.UserId.Value, clientType)); } if (currentContext.Organizations != null) @@ -82,11 +73,6 @@ public class NotificationsHub : Microsoft.AspNetCore.SignalR.Hub await base.OnDisconnectedAsync(exception); } - public static string GetGlobalGroup(ClientType clientType) - { - return $"ClientType_{clientType}"; - } - public static string GetUserGroup(Guid userId, ClientType clientType) { return $"UserClientType_{userId}_{clientType}";