diff --git a/src/main/java/im/rosetta/database/repository/PushTokenRepository.java b/src/main/java/im/rosetta/database/repository/PushTokenRepository.java index f3082ac..97aea0f 100644 --- a/src/main/java/im/rosetta/database/repository/PushTokenRepository.java +++ b/src/main/java/im/rosetta/database/repository/PushTokenRepository.java @@ -6,6 +6,7 @@ import org.hibernate.Session; import im.rosetta.database.HibernateUtil; import im.rosetta.database.Repository; +import im.rosetta.database.entity.Device; import im.rosetta.database.entity.PushToken; public class PushTokenRepository extends Repository { @@ -40,4 +41,19 @@ public class PushTokenRepository extends Repository { } } + /** + * Найти токен для заданного устройства и токена + * @param device устройство, которому принадлежит токен + * @param token токен, который нужно найти + * @return токен для заданного устройства и токена, или null, если такой токен не найден + */ + public PushToken findToken(Device device, String token){ + try (Session session = HibernateUtil.getSessionFactory().openSession()) { + return session.createQuery("SELECT pt FROM PushToken pt WHERE pt.device_id = :device AND pt.token = :token", PushToken.class) + .setParameter("device", device.getDeviceId()) + .setParameter("token", token) + .uniqueResult(); + } + } + } \ No newline at end of file diff --git a/src/main/java/im/rosetta/executors/Executor16PushNotification.java b/src/main/java/im/rosetta/executors/Executor16PushNotification.java index a7c0f1c..7aa55b0 100644 --- a/src/main/java/im/rosetta/executors/Executor16PushNotification.java +++ b/src/main/java/im/rosetta/executors/Executor16PushNotification.java @@ -7,6 +7,7 @@ import im.rosetta.client.tags.ECIAuthentificate; import im.rosetta.database.entity.Device; import im.rosetta.database.entity.PushToken; import im.rosetta.database.repository.DeviceRepository; +import im.rosetta.database.repository.PushTokenRepository; import im.rosetta.packet.Packet16PushNotification; import im.rosetta.packet.runtime.NetworkNotificationAction; import im.rosetta.service.services.DeviceService; @@ -19,6 +20,7 @@ public class Executor16PushNotification extends PacketExecutor tokens = device.getTokens(); - for(PushToken pushToken : tokens){ - if(pushToken.getToken().equals(token)){ - return pushToken; - } - } - return null; - } - private Device findDevice(String publicKey, String deviceId) { List devices = this.deviceService.getDevicesByPK(publicKey); if(devices.size() == 0){