From 16093fd693767b8e90a1217844c0b5545ea96037 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Tue, 31 Mar 2026 18:16:18 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20LazyInitializationEx?= =?UTF-8?q?ception?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dispatch/push/PushNotifyDispatcher.java | 37 +++++++++++++------ .../service/dispatch/push/RuntimeToken.java | 23 ++++++++++++ 2 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java diff --git a/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java b/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java index 44c994d..0bfc2b6 100644 --- a/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java +++ b/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java @@ -29,24 +29,38 @@ public class PushNotifyDispatcher { return this.pushers.get(tokenType); } - private List findPushTokens(String publicKey) { + private List findPushTokens(String publicKey) { List devices = this.deviceService.getDevicesByPK(publicKey); - List pushTokens = new java.util.ArrayList<>(); + List rtTokens = new java.util.ArrayList<>(); for(Device device : devices){ - pushTokens.addAll(device.getTokens()); + for(PushToken pushToken : device.getTokens()){ + rtTokens.add(new RuntimeToken(pushToken.getType(), pushToken.getToken())); + } } - return pushTokens; + return rtTokens; + } + + private List findPushTokens(List publicKeys) { + List rtTokens = new java.util.ArrayList<>(); + for(String publicKey : publicKeys){ + List devices = this.deviceService.getDevicesByPK(publicKey); + for(Device device : devices){ + for(PushToken pushToken : device.getTokens()){ + rtTokens.add(new RuntimeToken(pushToken.getType(), pushToken.getToken())); + } + } + } + return rtTokens; } - /** * Отправить уведомление пользователю с publicKey, используя все его токены для отправки уведомления, если таковые имеются * @param publicKey публичный ключ пользователя, которому нужно отправить уведомление * @param data данные уведомления */ public void sendPush(String publicKey, HashMap data) { + List pushTokens = this.findPushTokens(publicKey); executor.execute(() -> { - List pushTokens = this.findPushTokens(publicKey); - for(PushToken pushToken : pushTokens){ + for(RuntimeToken pushToken : pushTokens){ Pusher pusher = this.findPusher(pushToken.getType()); if(pusher != null){ pusher.sendPush(pushToken.getToken(), data); @@ -61,17 +75,16 @@ public class PushNotifyDispatcher { * @param data данные уведомления */ public void sendPush(List publicKeys, HashMap data) { + List pushTokens = this.findPushTokens(publicKeys); executor.execute(() -> { - for(String publicKey : publicKeys){ - List pushTokens = this.findPushTokens(publicKey); - for(PushToken pushToken : pushTokens){ - Pusher pusher = this.findPusher(pushToken.getType()); + for(RuntimeToken pushToken : pushTokens){ + Pusher pusher = this.findPusher(pushToken.getType()); if(pusher != null){ pusher.sendPush(pushToken.getToken(), data); } } } - }); + ); } diff --git a/src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java b/src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java new file mode 100644 index 0000000..f952dca --- /dev/null +++ b/src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java @@ -0,0 +1,23 @@ +package im.rosetta.service.dispatch.push; + +import im.rosetta.packet.runtime.TokenType; + +public class RuntimeToken { + + private TokenType type; + private String token; + + public RuntimeToken(TokenType type, String token) { + this.type = type; + this.token = token; + } + + public TokenType getType() { + return type; + } + + public String getToken() { + return token; + } + +}