aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/juick/service/PushQueriesService.java35
-rw-r--r--src/main/java/com/juick/service/PushQueriesServiceImpl.java91
-rw-r--r--src/main/java/com/juick/service/UserService.java8
-rw-r--r--src/main/java/com/juick/service/UserServiceImpl.java53
-rw-r--r--src/main/java/com/juick/www/api/Notifications.java15
-rw-r--r--src/test/java/com/juick/server/tests/ServerTests.java12
6 files changed, 72 insertions, 142 deletions
diff --git a/src/main/java/com/juick/service/PushQueriesService.java b/src/main/java/com/juick/service/PushQueriesService.java
deleted file mode 100644
index 7da89dee..00000000
--- a/src/main/java/com/juick/service/PushQueriesService.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008-2023, Juick
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.juick.service;
-
-import com.juick.model.ExternalToken;
-
-import java.util.Collection;
-
-/**
- * Created by aalexeev on 11/13/16.
- */
-public interface PushQueriesService {
- Collection<ExternalToken> getToken(int uid, String serviceType);
-
- Collection<ExternalToken> getTokens(Collection<Integer> uids);
-
- boolean addToken(Integer uid, String serviceType, String token);
-
- boolean deleteToken(String serviceType, String token);
-}
diff --git a/src/main/java/com/juick/service/PushQueriesServiceImpl.java b/src/main/java/com/juick/service/PushQueriesServiceImpl.java
deleted file mode 100644
index 18a14bd6..00000000
--- a/src/main/java/com/juick/service/PushQueriesServiceImpl.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2008-2023, Juick
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.juick.service;
-
-import com.juick.model.ExternalToken;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.dao.DataIntegrityViolationException;
-import org.springframework.jdbc.core.RowMapper;
-import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Collections;
-
-/**
- * Created by aalexeev on 11/13/16.
- */
-@Repository
-public class PushQueriesServiceImpl extends BaseJdbcService implements PushQueriesService {
-
- private class TokenMapper implements RowMapper<ExternalToken> {
-
- @Override
- public ExternalToken mapRow(ResultSet rs, int rowNum) throws SQLException {
- return new ExternalToken(
- null,
- rs.getString("service_type"),
- rs.getString("regid"),
- null
- );
- }
- }
-
- @Transactional(readOnly = true)
- @Override
- public Collection<ExternalToken> getToken(final int uid, final String serviceType) {
- return getJdbcTemplate().query(
- "SELECT regid, service_type FROM user_services WHERE user_id=? AND service_type=?",
- new TokenMapper(),
- uid, serviceType);
- }
-
- @Transactional(readOnly = true)
- @Override
- public Collection<ExternalToken> getTokens(final Collection<Integer> uids) {
- if (CollectionUtils.isEmpty(uids))
- return Collections.emptyList();
- return getNamedParameterJdbcTemplate().query(
- """
- SELECT regid, service_type FROM user_services INNER JOIN users
- ON (users.id = user_services.user_id) WHERE users.id IN (:ids)""",
- new MapSqlParameterSource("ids", uids),
- new TokenMapper());
- }
-
- @Transactional
- @Override
- public boolean addToken(final Integer uid, final String serviceType, final String token) {
- try {
- return getJdbcTemplate().update(
- "INSERT INTO user_services(user_id, regid, service_type) VALUES (?, ?, ?)",
- uid, token, serviceType) > 0;
- } catch (DataIntegrityViolationException e) {
- return false;
- }
- }
-
- @Transactional
- @Override
- public boolean deleteToken(final String serviceType, final String token) {
- return getJdbcTemplate().update("DELETE FROM user_services WHERE regid=? AND service_type=?", token, serviceType) > 0;
- }
-}
diff --git a/src/main/java/com/juick/service/UserService.java b/src/main/java/com/juick/service/UserService.java
index 8e4067e9..ab060d5f 100644
--- a/src/main/java/com/juick/service/UserService.java
+++ b/src/main/java/com/juick/service/UserService.java
@@ -197,4 +197,12 @@ public interface UserService {
boolean setJIDUser(String hash, int uid);
boolean canDeleteTelegramUser(User user);
+
+ Collection<ExternalToken> getToken(int uid, String serviceType);
+
+ Collection<ExternalToken> getTokens(Collection<Integer> uids);
+
+ boolean addToken(Integer uid, String serviceType, String token);
+
+ boolean deleteToken(String serviceType, String token);
}
diff --git a/src/main/java/com/juick/service/UserServiceImpl.java b/src/main/java/com/juick/service/UserServiceImpl.java
index 4bc28afa..6114bf78 100644
--- a/src/main/java/com/juick/service/UserServiceImpl.java
+++ b/src/main/java/com/juick/service/UserServiceImpl.java
@@ -928,4 +928,57 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
public boolean canDeleteTelegramUser(User user) {
return getEmails(user).size() > 0 || getFbCrossPostStatus(user.getUid()).isConnected() || getVkTokens(user.getUid()).isPresent();
}
+ private class TokenMapper implements RowMapper<ExternalToken> {
+
+ @Override
+ public ExternalToken mapRow(ResultSet rs, int rowNum) throws SQLException {
+ return new ExternalToken(
+ null,
+ rs.getString("service_type"),
+ rs.getString("regid"),
+ null
+ );
+ }
+ }
+
+ @Transactional(readOnly = true)
+ @Override
+ public Collection<ExternalToken> getToken(final int uid, final String serviceType) {
+ return getJdbcTemplate().query(
+ "SELECT regid, service_type FROM user_services WHERE user_id=? AND service_type=?",
+ new TokenMapper(),
+ uid, serviceType);
+ }
+
+ @Transactional(readOnly = true)
+ @Override
+ public Collection<ExternalToken> getTokens(final Collection<Integer> uids) {
+ if (CollectionUtils.isEmpty(uids))
+ return Collections.emptyList();
+ return getNamedParameterJdbcTemplate().query(
+ """
+ SELECT regid, service_type FROM user_services INNER JOIN users
+ ON (users.id = user_services.user_id) WHERE users.id IN (:ids)""",
+ new MapSqlParameterSource("ids", uids),
+ new TokenMapper());
+ }
+
+ @Transactional
+ @Override
+ public boolean addToken(final Integer uid, final String serviceType, final String token) {
+ try {
+ return getJdbcTemplate().update(
+ "INSERT INTO user_services(user_id, regid, service_type) VALUES (?, ?, ?)",
+ uid, token, serviceType) > 0;
+ } catch (DataIntegrityViolationException e) {
+ return false;
+ }
+ }
+
+ @Transactional
+ @Override
+ public boolean deleteToken(final String serviceType, final String token) {
+ return getJdbcTemplate().update("DELETE FROM user_services WHERE regid=? AND service_type=?", token, serviceType) > 0;
+ }
}
+
diff --git a/src/main/java/com/juick/www/api/Notifications.java b/src/main/java/com/juick/www/api/Notifications.java
index 1ebe3c61..ac5a635b 100644
--- a/src/main/java/com/juick/www/api/Notifications.java
+++ b/src/main/java/com/juick/www/api/Notifications.java
@@ -39,9 +39,6 @@ import java.util.stream.Stream;
@RestController
public class Notifications {
private static final Logger logger = LoggerFactory.getLogger("www");
-
- @Inject
- private PushQueriesService pushQueriesService;
@Inject
private MessagesService messagesService;
@Inject
@@ -56,7 +53,7 @@ public class Notifications {
private User collectTokens(Integer uid) {
User user = userService.getUserByUID(uid).orElse(AnonymousUser.INSTANCE);
user.setUnreadCount(messagesService.getUnread(user).size());
- var tokens = pushQueriesService.getTokens(List.of(user.getUid()));
+ var tokens = userService.getTokens(List.of(user.getUid()));
var xmppJids = userService.getJIDsbyUID(uid).stream()
.map(jid -> new ExternalToken(null, "xmpp", jid, null));
var tgIds = telegramService.getTelegramIdentifiers(Collections.singletonList(user)).stream()
@@ -113,7 +110,7 @@ public class Notifications {
throw new HttpForbiddenException();
}
list.forEach(t -> {
- pushQueriesService.deleteToken(t.type(), t.token());
+ userService.deleteToken(t.type(), t.token());
});
return Status.OK;
@@ -127,7 +124,7 @@ public class Notifications {
throw new HttpForbiddenException();
}
list.forEach(t -> {
- pushQueriesService.deleteToken(t.type(), t.token());
+ userService.deleteToken(t.type(), t.token());
});
return Status.OK;
@@ -139,7 +136,7 @@ public class Notifications {
@Parameter(hidden = true) User visitor,
@RequestBody List<ExternalToken> list) {
list.forEach(t -> {
- pushQueriesService.addToken(visitor.getUid(), t.type(), t.token());
+ userService.addToken(visitor.getUid(), t.type(), t.token());
});
return Status.OK;
}
@@ -149,7 +146,7 @@ public class Notifications {
public Status doAndroidRegister(
@Parameter(hidden = true) User visitor,
@RequestParam(name = "regid") String regId) {
- pushQueriesService.addToken(visitor.getUid(),"fcm", regId);
+ userService.addToken(visitor.getUid(),"fcm", regId);
return Status.OK;
}
@@ -158,7 +155,7 @@ public class Notifications {
public Status doWinphoneRegister(
@Parameter(hidden = true) User visitor,
@RequestParam(name = "url") String regId) {
- pushQueriesService.addToken(visitor.getUid(), "mpns", regId);
+ userService.addToken(visitor.getUid(), "mpns", regId);
return Status.OK;
}
}
diff --git a/src/test/java/com/juick/server/tests/ServerTests.java b/src/test/java/com/juick/server/tests/ServerTests.java
index d6f0b6ae..de85fbf3 100644
--- a/src/test/java/com/juick/server/tests/ServerTests.java
+++ b/src/test/java/com/juick/server/tests/ServerTests.java
@@ -280,8 +280,6 @@ public class ServerTests {
private User archiveUser;
@Inject
private ConversionService conversionService;
- @Inject
- private PushQueriesService pushQueriesService;
private static User ugnich, freefd;
static String ugnichName, ugnichPassword, freefdName, freefdPassword;
@@ -2759,11 +2757,11 @@ public class ServerTests {
@Test
public void userServicesTest() throws Exception {
jdbcTemplate.execute("DELETE FROM user_services");
- pushQueriesService.addToken(ugnich.getUid(), "fcm", "12345");
- pushQueriesService.addToken(ugnich.getUid(), "mpns", "23456");
- pushQueriesService.addToken(ugnich.getUid(), "xmpp", "234567");
- pushQueriesService.addToken(ugnich.getUid(), "durov", "345678");
- assertThat(pushQueriesService.getTokens(List.of(ugnich.getUid())).size(), is(4));
+ userService.addToken(ugnich.getUid(), "fcm", "12345");
+ userService.addToken(ugnich.getUid(), "mpns", "23456");
+ userService.addToken(ugnich.getUid(), "xmpp", "234567");
+ userService.addToken(ugnich.getUid(), "durov", "345678");
+ assertThat(userService.getTokens(List.of(ugnich.getUid())).size(), is(4));
mockMvc.perform(get("/api/notifications")
.with(httpBasic(serviceUser.getName(), serviceUser.getCredentials()))
.param("uid", String.valueOf(ugnich.getUid())))