From 5c11e3e85b70a3789c3e330209122723f1b38121 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sun, 15 Jan 2023 09:47:06 +0300 Subject: PushQueriesService -> UserService --- .../java/com/juick/service/PushQueriesService.java | 35 --------- .../com/juick/service/PushQueriesServiceImpl.java | 91 ---------------------- src/main/java/com/juick/service/UserService.java | 8 ++ .../java/com/juick/service/UserServiceImpl.java | 53 +++++++++++++ src/main/java/com/juick/www/api/Notifications.java | 15 ++-- .../java/com/juick/server/tests/ServerTests.java | 12 ++- 6 files changed, 72 insertions(+), 142 deletions(-) delete mode 100644 src/main/java/com/juick/service/PushQueriesService.java delete mode 100644 src/main/java/com/juick/service/PushQueriesServiceImpl.java (limited to 'src') 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 . - */ - -package com.juick.service; - -import com.juick.model.ExternalToken; - -import java.util.Collection; - -/** - * Created by aalexeev on 11/13/16. - */ -public interface PushQueriesService { - Collection getToken(int uid, String serviceType); - - Collection getTokens(Collection 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 . - */ - -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 { - - @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 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 getTokens(final Collection 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 getToken(int uid, String serviceType); + + Collection getTokens(Collection 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 { + + @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 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 getTokens(final Collection 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 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()))) -- cgit v1.2.3