diff options
Diffstat (limited to 'src/main/java/com/juick')
5 files changed, 67 insertions, 135 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; } } |