diff options
Diffstat (limited to 'juick-server/src/main/java/com/juick/service')
23 files changed, 672 insertions, 299 deletions
diff --git a/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java b/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java index 14bdc7e2..e4dd50f9 100644 --- a/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java @@ -18,6 +18,8 @@ package com.juick.service; import com.juick.ExternalToken; +import com.juick.User; +import com.juick.service.data.UsersRepository; import com.juick.server.helpers.ApplicationStatus; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; @@ -25,6 +27,7 @@ import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import javax.inject.Inject; import java.util.List; import java.util.Optional; @@ -33,15 +36,17 @@ import java.util.Optional; */ @Repository public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostService { + @Inject + UsersRepository usersRepository; @Transactional(readOnly = true) @Override - public Optional<ExternalToken> getTwitterToken(final int uid) { + public Optional<ExternalToken> getTwitterToken(final User user) { List<ExternalToken> list = getJdbcTemplate().query( "SELECT uname, access_token, access_token_secret FROM twitter WHERE user_id = ? AND crosspost = 1", (rs, num) -> new ExternalToken(rs.getString(1), "twitter", rs.getString(2), rs.getString(3)), - uid); + user.getUid()); return list.isEmpty() ? Optional.empty() : Optional.of(list.get(0)); @@ -49,9 +54,9 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional @Override - public boolean deleteTwitterToken(Integer uid) { - return getJdbcTemplate().update("DELETE FROM twitter WHERE user_id=?", uid) > 0 - && getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=1741", uid) > 0; + public boolean deleteTwitterToken(User user) { + return getJdbcTemplate().update("DELETE FROM twitter WHERE user_id=?", user.getUid()) > 0 + && getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=1741", user.getUid()) > 0; } @Override @@ -86,18 +91,18 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional(readOnly = true) @Override - public Optional<Pair<String, String>> getFacebookTokens(final int uid) { + public Optional<Pair<String, String>> getFacebookTokens(final User user) { List<Optional<Pair<String, String>>> list = getJdbcTemplate().query( "SELECT fb_id, access_token FROM facebook WHERE user_id = ? AND access_token IS NOT NULL AND crosspost = 1", (rs, num) -> Optional.of(Pair.of(rs.getString(1), rs.getString(2))), - uid); + user.getUid()); return list.isEmpty() ? Optional.empty() : list.get(0); } @Transactional(readOnly = true) @Override - public ApplicationStatus getFbCrossPostStatus(final int uid) { + public ApplicationStatus getFbCrossPostStatus(final User user) { List<ApplicationStatus> list = getJdbcTemplate().query( "SELECT 1, crosspost FROM facebook WHERE user_id = ? LIMIT 1", (rs, num) -> { @@ -108,7 +113,7 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe return status; }, - uid); + user.getUid()); return list.isEmpty() ? new ApplicationStatus() : list.get(0); @@ -116,28 +121,28 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional @Override - public boolean enableFBCrosspost(Integer uid) { - return getJdbcTemplate().update("UPDATE facebook SET crosspost=1 WHERE user_id=?", uid) > 0 + public boolean enableFBCrosspost(User user) { + return getJdbcTemplate().update("UPDATE facebook SET crosspost=1 WHERE user_id=?", user.getUid()) > 0 && getJdbcTemplate().update( "INSERT INTO subscr_users(user_id,suser_id,jid,active) VALUES (?,5863,'juick@facebook.juick.com',1)", - uid) > 0; + user.getUid()) > 0; } @Transactional @Override - public void disableFBCrosspost(Integer uid) { - getJdbcTemplate().update("UPDATE facebook SET crosspost=0 WHERE user_id=?", uid); + public void disableFBCrosspost(User user) { + getJdbcTemplate().update("UPDATE facebook SET crosspost=0 WHERE user_id=?", user.getUid()); // TODO: stop using magic numbers for system users - getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=5863", uid); + getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=5863", user.getUid()); } @Transactional(readOnly = true) @Override - public String getTwitterName(final int uid) { + public String getTwitterName(final User user) { List<String> list = getJdbcTemplate().queryForList( "SELECT uname FROM twitter WHERE user_id = ?", String.class, - uid); + user.getUid()); return list.isEmpty() ? StringUtils.EMPTY : list.get(0); @@ -145,11 +150,11 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional(readOnly = true) @Override - public String getTelegramName(final int uid) { + public String getTelegramName(final User user) { List<String> list = getJdbcTemplate().queryForList( "SELECT tg_name FROM telegram WHERE user_id = ?", String.class, - uid); + user.getUid()); return list.isEmpty() ? StringUtils.EMPTY : list.get(0); @@ -157,11 +162,11 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional(readOnly = true) @Override - public Optional<Pair<String, String>> getVkTokens(final int uid) { + public Optional<Pair<String, String>> getVkTokens(final User user) { List<Optional<Pair<String, String>>> list = getJdbcTemplate().query( "SELECT vk_id, access_token FROM vk WHERE user_id = ? AND crosspost = 1", (rs, num) -> Optional.of(Pair.of(rs.getString(1), rs.getString(2))), - uid); + user.getUid()); return list.isEmpty() ? Optional.empty() : list.get(0); @@ -169,19 +174,14 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional @Override - public void deleteVKUser(Integer uid) { - getJdbcTemplate().update("DELETE FROM vk WHERE user_id=?", uid); + public void deleteVKUser(User user) { + getJdbcTemplate().update("DELETE FROM vk WHERE user_id=?", user.getUid()); } @Transactional(readOnly = true) @Override - public int getUIDbyFBID(long fbID) { - try { - return getJdbcTemplate().queryForObject("SELECT user_id FROM facebook WHERE fb_id=? AND user_id IS NOT NULL", - Integer.class, fbID); - } catch (EmptyResultDataAccessException e) { - return 0; - } + public Optional<User> getUserByFBID(long fbID) { + return usersRepository.findByFacebookIds_FacebookId(fbID).map(EntityUtils::entityToUser); } @Transactional @@ -200,12 +200,8 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional(readOnly = true) @Override - public int getUIDbyVKID(long vkID) { - try { - return getJdbcTemplate().queryForObject("SELECT user_id FROM vk WHERE vk_id=? AND user_id IS NOT NULL", Integer.class, vkID); - } catch (EmptyResultDataAccessException e) { - return 0; - } + public Optional<User> getUserByVKID(long vkID) { + return usersRepository.findByVkIds_VkId(vkID).map(EntityUtils::entityToUser); } @Transactional @@ -243,8 +239,8 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional @Override - public boolean setFacebookUser(String hash, int uid) { - return getJdbcTemplate().update("UPDATE facebook SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0; + public boolean setFacebookUser(String hash, User user) { + return getJdbcTemplate().update("UPDATE facebook SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0; } @Transactional @@ -260,14 +256,14 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional @Override - public boolean setVKUser(String hash, int uid) { - return getJdbcTemplate().update("UPDATE vk SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0; + public boolean setVKUser(String hash, User user) { + return getJdbcTemplate().update("UPDATE vk SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0; } @Transactional @Override - public boolean setTelegramUser(String hash, int uid) { - return getJdbcTemplate().update("UPDATE telegram SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0; + public boolean setTelegramUser(String hash, User user) { + return getJdbcTemplate().update("UPDATE telegram SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0; } @Transactional(readOnly = true) @@ -282,7 +278,7 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe @Transactional @Override - public boolean setJIDUser(String hash, int uid) { - return getJdbcTemplate().update("UPDATE jids SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0; + public boolean setJIDUser(String hash, User user) { + return getJdbcTemplate().update("UPDATE jids SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0; } } diff --git a/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java b/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java index 0cccc915..47d1efe5 100644 --- a/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java @@ -17,6 +17,7 @@ package com.juick.service; +import com.juick.User; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -35,12 +36,12 @@ import java.util.List; public class EmailServiceImpl extends BaseJdbcService implements EmailService { @Override - public boolean verifyAddressByCode(Integer userId, String code) { + public boolean verifyAddressByCode(User user, String code) { try { String address = getJdbcTemplate().queryForObject("SELECT account FROM auth WHERE user_id=? AND protocol='email' AND authcode=?", - String.class, userId, code); - addEmail(userId, address); - getJdbcTemplate().update("DELETE FROM auth WHERE user_id=? AND authcode=?", userId, code); + String.class, user.getUid(), code); + addEmail(user, address); + getJdbcTemplate().update("DELETE FROM auth WHERE user_id=? AND authcode=?", user.getUid(), code); } catch (EmptyResultDataAccessException e) { return false; } @@ -48,45 +49,45 @@ public class EmailServiceImpl extends BaseJdbcService implements EmailService { } @Override - public boolean addVerificationCode(Integer userId, String account, String code) { + public boolean addVerificationCode(User user, String account, String code) { return getJdbcTemplate().update("INSERT INTO auth(user_id,protocol,account,authcode) VALUES (?,'email',?,?)", - userId, account, code) > 0; + user.getUid(), account, code) > 0; } @Override - public boolean addEmail(Integer userId, String email) { - return getJdbcTemplate().update("INSERT INTO emails(user_id,email) VALUES (?,?)", userId, email) > 0; + public boolean addEmail(User user, String email) { + return getJdbcTemplate().update("INSERT INTO emails(user_id,email) VALUES (?,?)", user.getUid(), email) > 0; } @Override - public boolean deleteEmail(Integer userId, String account) { + public boolean deleteEmail(User user, String account) { return getNamedParameterJdbcTemplate().update("DELETE FROM emails " + "WHERE (SELECT COUNT(*) cnt FROM (select user_id, email FROM emails e) c WHERE user_id=:uid) > 1 " + "AND user_id=:uid AND email=:email", new MapSqlParameterSource() - .addValue("uid", userId) + .addValue("uid", user.getUid()) .addValue("email", account)) > 0; } @Transactional(readOnly = true) @Override - public String getNotificationsEmail(Integer userId) { + public String getNotificationsEmail(User user) { List<String> list = getJdbcTemplate().queryForList( - "SELECT email FROM emails WHERE user_id=? AND subscr_hour IS NOT NULL", String.class, userId); + "SELECT email FROM emails WHERE user_id=? AND subscr_hour IS NOT NULL", String.class, user.getUid()); return list.isEmpty() ? StringUtils.EMPTY : list.get(0); } @Override - public boolean setNotificationsEmail(Integer userId, String account) { - getJdbcTemplate().update("UPDATE emails SET subscr_hour=NULL WHERE user_id=?", userId); + public boolean setNotificationsEmail(User user, String account) { + getJdbcTemplate().update("UPDATE emails SET subscr_hour=NULL WHERE user_id=?", user.getUid()); return StringUtils.isNotEmpty(account) && getJdbcTemplate().update( - "UPDATE emails SET subscr_hour=1 WHERE user_id=? AND email=?", userId, account) > 0; + "UPDATE emails SET subscr_hour=1 WHERE user_id=? AND email=?", user.getUid(), account) > 0; } @Transactional(readOnly = true) @Override - public List<String> getEmails(Integer userId, boolean active) { + public List<String> getEmails(User user, boolean active) { return getJdbcTemplate().queryForList("SELECT email FROM emails WHERE user_id=? " + - (active ? "AND subscr_hour IS NOT NULL" : ""), String.class, userId); + (active ? "AND subscr_hour IS NOT NULL" : ""), String.class, user.getUid()); } } diff --git a/juick-server/src/main/java/com/juick/service/EntityUtils.java b/juick-server/src/main/java/com/juick/service/EntityUtils.java new file mode 100644 index 00000000..7f296e77 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/EntityUtils.java @@ -0,0 +1,22 @@ +package com.juick.service; + +import com.juick.User; +import com.juick.service.data.entities.UserEntity; + +class EntityUtils { + static User entityToUser(UserEntity entity) { + User user = new User(); + user.setUid(entity.getId()); + user.setName(entity.getName()); + user.setBanned(entity.isBanned()); + return user; + } + static User entityToSecurityUser(UserEntity entity) { + User user = new User(); + user.setUid(entity.getId()); + user.setName(entity.getName()); + user.setBanned(entity.isBanned()); + user.setCredentials(entity.getPassword()); + return user; + } +} diff --git a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java index a78c9203..b981b37f 100644 --- a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java @@ -20,6 +20,9 @@ package com.juick.service; import com.juick.*; import com.juick.server.helpers.PrivacyOpts; import com.juick.server.helpers.ResponseReply; +import com.juick.service.data.MessagesRepository; +import com.juick.service.data.UsersRepository; +import com.juick.service.data.entities.MessageEntity; import com.juick.util.MessageUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -51,6 +54,10 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Inject private UserService userService; @Inject + private UsersRepository usersRepository; + @Inject + private MessagesRepository messagesRepository; + @Inject private TagService tagService; @Inject private SearchService searchService; @@ -110,19 +117,15 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ */ @Transactional @Override - public int createMessage(final int uid, final String txt, final String attachment, final Collection<com.juick.Tag> tags) { - SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate()).withTableName("messages") - .usingColumns("user_id", "attach", "ts") - .usingGeneratedKeyColumns("message_id"); - Map<String, Object> insertMap = new HashMap<>(); - insertMap.put("user_id", uid); + public Message createMessage(final User user, final String txt, final String attachment, final Collection<com.juick.Tag> tags) { + MessageEntity newMsg = new MessageEntity(); + newMsg.setText(txt); + newMsg.setUser(usersRepository.findById(user.getUid()).orElseThrow(IllegalStateException::new)); Instant now = Instant.now(); - insertMap.put("ts", Timestamp.from(now)); - if (attachment != null) { - insertMap.put("attach", attachment); - } - int mid = simpleJdbcInsert.executeAndReturnKey(insertMap).intValue(); - if (mid > 0) { + newMsg.setTimestamp(now); + + newMsg = messagesRepository.save(newMsg); + if (newMsg.getId() > 0) { String tagsNames = StringUtils.EMPTY; if (CollectionUtils.isNotEmpty(tags)) { @@ -138,7 +141,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ next = true; tasNamesBuilder.append(tag.getName()); - params.add(new Object[]{mid, tag.TID}); + params.add(new Object[]{newMsg.getId(), tag.TID}); } tagsNames = tasNamesBuilder.toString(); @@ -148,13 +151,13 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ } getJdbcTemplate().update( - "INSERT INTO messages_txt(message_id, tags, txt) VALUES (?, ?, ?)", - new Object[]{mid, tagsNames, txt}, - new int[]{Types.INTEGER, Types.VARCHAR, Types.VARCHAR}); - getJdbcTemplate().update("UPDATE users SET lastmessage=? where id=?", Timestamp.from(now), uid); + "UPDATE messages_txt SET tags=? WHERE message_id=?", + new Object[]{tagsNames, newMsg.getId()}, + new int[]{Types.VARCHAR, Types.INTEGER}); + getJdbcTemplate().update("UPDATE users SET lastmessage=? where id=?", Timestamp.from(now), user.getUid()); } - return mid; + return getMessage(newMsg.getId()); } /** diff --git a/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java b/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java index b68e0236..01b825e4 100644 --- a/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java @@ -34,16 +34,16 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe @Transactional @Override - public boolean createPM(final int uidFrom, final int uid_to, final String body) { + public boolean createPM(final User me, final User to, final String body) { boolean ret = getJdbcTemplate().update( "INSERT INTO pm(user_id, user_id_to, txt) VALUES (?, ?, ?)", - uidFrom, uid_to, body) > 0; + me.getUid(), to.getUid(), body) > 0; if (ret) { try { getJdbcTemplate().update( "INSERT INTO pm_streams(user_id, user_id_to, lastmessage, unread) VALUES (?, ?, NOW(), 1)", - uidFrom, uid_to); + me.getUid(), to.getUid()); } catch (DuplicateKeyException e) { // ignore } @@ -53,43 +53,31 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe @Transactional @Override - public boolean addPMinRoster(final int uid, final String jid) { + public boolean addPMinRoster(final User me, final String jid) { return getJdbcTemplate().update( - "INSERT INTO pm_inroster(user_id, jid) VALUES (?, ?) ON DUPLICATE KEY UPDATE user_id=user_id", uid, jid) > 0; + "INSERT INTO pm_inroster(user_id, jid) VALUES (?, ?) ON DUPLICATE KEY UPDATE user_id=user_id", me.getUid(), jid) > 0; } @Transactional @Override - public boolean removePMinRoster(final int uid, final String jid) { + public boolean removePMinRoster(final User me, final String jid) { return getJdbcTemplate().update( - "DELETE FROM pm_inroster WHERE user_id = ? AND jid = ?", uid, jid) > 0; + "DELETE FROM pm_inroster WHERE user_id = ? AND jid = ?", me.getUid(), jid) > 0; } @Transactional @Override - public boolean havePMinRoster(final int uid, final String jid) { + public boolean havePMinRoster(final User me, final String jid) { List<Integer> res = getJdbcTemplate().queryForList( "SELECT 1 FROM pm_inroster WHERE user_id = ? AND jid = ?", Integer.class, - uid, jid); + me.getUid(), jid); return res.size() > 0; } @Transactional(readOnly = true) @Override - public String getLastView(final int uidFrom, final int uidTo) { - List<String> list = getJdbcTemplate().queryForList( - "SELECT lastview FROM pm_streams WHERE user_id = ? AND user_id_to = ?", - String.class, - uidFrom, uidTo); - - return list.isEmpty() ? - null : list.get(0); - } - - @Transactional(readOnly = true) - @Override - public List<User> getPMLastConversationsUsers(final int uid, final int cnt) { + public List<User> getPMLastConversationsUsers(final User me, final int cnt) { return getJdbcTemplate().query( "SELECT pm_streams.user_id, users.nick, pm_streams.unread FROM pm_streams " + "INNER JOIN users ON users.id = pm_streams.user_id " @@ -102,15 +90,15 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe u.setUnreadCount(rs.getInt(3)); return u; }, - uid, cnt); + me.getUid(), cnt); } @Transactional @Override - public List<com.juick.Message> getPMMessages(final int uid, final int uidTo) { + public List<com.juick.Message> getPMMessages(final User me, final User to) { SqlParameterSource sqlParameterSource = new MapSqlParameterSource() - .addValue("uid", uid) - .addValue("uidTo", uidTo); + .addValue("uid", me.getUid()) + .addValue("uidTo", to.getUid()); List<com.juick.Message> msgs = getNamedParameterJdbcTemplate().query( "SELECT pm.user_id, pm.txt, pm.ts, users.nick FROM pm INNER JOIN users ON users.id=pm.user_id WHERE (user_id = :uid AND user_id_to = :uidTo) " @@ -137,7 +125,7 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe @Transactional(readOnly = true) @Override - public List<com.juick.Message> getLastPMInbox(final int uid) { + public List<com.juick.Message> getLastPMInbox(final User me) { return getJdbcTemplate().query( "SELECT pm.user_id, users.nick, pm.txt, pm.ts " + "FROM pm INNER JOIN users ON pm.user_id=users.id WHERE pm.user_id_to=? ORDER BY pm.ts DESC LIMIT 20", @@ -150,12 +138,12 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe msg.setTimestamp(rs.getTimestamp(4).toInstant()); return msg; }, - uid); + me.getUid()); } @Transactional(readOnly = true) @Override - public List<com.juick.Message> getLastPMSent(final int uid) { + public List<com.juick.Message> getLastPMSent(final User me) { return getJdbcTemplate().query( "SELECT pm.user_id_to, users.nick, pm.txt, " + "pm.ts FROM pm INNER JOIN users ON pm.user_id_to=users.id " + @@ -169,6 +157,6 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe msg.setTimestamp(rs.getTimestamp(4).toInstant()); return msg; }, - uid); + me.getUid()); } } diff --git a/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java b/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java index 4e37bfac..dd6ab8cf 100644 --- a/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java @@ -18,13 +18,17 @@ package com.juick.service; import com.juick.User; +import com.juick.server.helpers.AnonymousUser; +import com.juick.service.data.UsersRepository; import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import javax.inject.Inject; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; @@ -33,6 +37,8 @@ import java.util.stream.Collectors; */ @Repository public class TelegramServiceImpl extends BaseJdbcService implements TelegramService { + @Inject + UsersRepository usersRepository; @Transactional @Override @@ -58,12 +64,8 @@ public class TelegramServiceImpl extends BaseJdbcService implements TelegramServ @Transactional(readOnly = true) @Override - public int getUser(final long tgId) { - List<Integer> list = getJdbcTemplate().queryForList( - "SELECT id FROM users INNER JOIN telegram " + - "ON telegram.user_id = users.id WHERE telegram.tg_id=?", Integer.class, tgId); - - return list.isEmpty() ? 0 : list.get(0); + public User getUser(final long tgId) { + return usersRepository.findByTgIds_Identifier(tgId).map(EntityUtils::entityToUser).orElse(AnonymousUser.INSTANCE); } @Transactional diff --git a/juick-server/src/main/java/com/juick/service/UserServiceImpl.java b/juick-server/src/main/java/com/juick/service/UserServiceImpl.java index 2de3dfc6..ad6be9aa 100644 --- a/juick-server/src/main/java/com/juick/service/UserServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/UserServiceImpl.java @@ -19,31 +19,35 @@ package com.juick.service; import com.juick.Message; import com.juick.User; +import com.juick.service.data.UsersRepository; +import com.juick.service.data.entities.EmailEntity; +import com.juick.service.data.entities.LoginEntity; +import com.juick.service.data.entities.UserEntity; import com.juick.server.helpers.AnonymousUser; import com.juick.server.helpers.Auth; import com.juick.server.helpers.UserInfo; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; -import org.springframework.jdbc.support.GeneratedKeyHolder; -import org.springframework.jdbc.support.KeyHolder; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; -import java.sql.PreparedStatement; +import javax.inject.Inject; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; import java.util.*; +import java.util.stream.Collectors; /** * Created by aalexeev on 11/13/16. */ @Repository public class UserServiceImpl extends BaseJdbcService implements UserService { + @Inject + private UsersRepository usersRepository; private class UserMapper implements RowMapper<User> { @Override @@ -90,106 +94,57 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { return list.get(0); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override - public int createUser(final String username, final String password) { - KeyHolder holder = new GeneratedKeyHolder(); + public User createUser(final String username, final String password) { + UserEntity newUser = new UserEntity(); + newUser.setName(username); + newUser.setPassword(password); try { - getJdbcTemplate().update( - con -> { - PreparedStatement stmt = con.prepareStatement( - "INSERT INTO users(nick,passw) VALUES (?,?)", - Statement.RETURN_GENERATED_KEYS); - stmt.setString(1, username); - stmt.setString(2, password); - return stmt; - }, - holder); - } catch (DuplicateKeyException e) { - return -1; + UserEntity created = usersRepository.save(newUser); + getJdbcTemplate().update("INSERT INTO useroptions(user_id) VALUES (?)", created.getId()); + getJdbcTemplate().update("INSERT INTO subscr_users(user_id, suser_id) VALUES (2, ?)", created.getId()); + return EntityUtils.entityToUser(created); + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AnonymousUser.INSTANCE; } - - int uid = holder.getKey().intValue(); - - getJdbcTemplate().update("INSERT INTO useroptions(user_id) VALUES (?)", uid); - getJdbcTemplate().update("INSERT INTO subscr_users(user_id, suser_id) VALUES (2, ?)", uid); - - return uid; } @Transactional(readOnly = true) @Override public Optional<User> getUserByUID(final int uid) { - List<User> list = getJdbcTemplate().query( - "SELECT id, nick, banned, lang FROM users WHERE id = ?", new UserMapper(), uid); - - return list.isEmpty() ? Optional.empty() : Optional.of(list.get(0)); + return usersRepository.findById(uid).map(EntityUtils::entityToUser); } @Transactional(readOnly = true) @Override public User getUserByName(final String username) { - if (StringUtils.isNotBlank(username)) { - List<User> list = getJdbcTemplate().query( - "SELECT id, nick, banned, lang FROM users WHERE nick = ?", new UserMapper(), username); - - if (!list.isEmpty()) - return list.get(0); + Optional<UserEntity> e = usersRepository.findByName(username); + if (e.isPresent()) { + return EntityUtils.entityToUser(e.get()); } - // TODO: @NonNullable ? return AnonymousUser.INSTANCE; } @Override - // No need marks with @Transactional annotation + @Transactional(readOnly = true) public User getFullyUserByName(final String username) { - if (StringUtils.isNotBlank(username)) { - List<User> list = getFullyUsersByNames(Collections.singletonList(username)); - if (!list.isEmpty()) - return list.get(0); - } - return null; + return usersRepository.findByName(username).map(EntityUtils::entityToSecurityUser).orElse(AnonymousUser.INSTANCE); } @Override @Transactional(readOnly = true) public User getUserByEmail(String email) { - if (StringUtils.isNotBlank(email)) { - List<User> list = getJdbcTemplate().query( - "SELECT id, nick, banned, lang FROM users WHERE id = (SELECT DISTINCT user_id FROM emails WHERE email = ?)", - new UserMapper(), - email); - - if (!list.isEmpty()) - return list.get(0); + Optional<UserEntity> e = usersRepository.findByEmailsEmail(email); + if (e.isPresent()) { + return EntityUtils.entityToUser(e.get()); } return AnonymousUser.INSTANCE; } @Transactional(readOnly = true) @Override - public List<User> getFullyUsersByNames(final Collection<String> usernames) { - if (CollectionUtils.isEmpty(usernames)) - return Collections.emptyList(); - - return getNamedParameterJdbcTemplate().query( - "SELECT id, nick, passw, lang, banned FROM users WHERE nick in (:names)", - new MapSqlParameterSource("names", usernames), - (rs, rowNum) -> { - User user = new User(); - - user.setUid(rs.getInt(1)); - user.setName(rs.getString(2)); - user.setCredentials(rs.getString(3)); - user.setLang(rs.getString(4)); - user.setBanned(rs.getBoolean(5)); - - return user; - }); - } - - @Transactional(readOnly = true) - @Override public User getUserByJID(final String jid) { User result = null; @@ -208,25 +163,13 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { @Transactional(readOnly = true) @Override public List<User> getUsersByName(final Collection<String> unames) { - if (CollectionUtils.isEmpty(unames)) - return Collections.emptyList(); - - return getNamedParameterJdbcTemplate().query( - "SELECT id, nick, banned, lang FROM users WHERE nick IN (:unames)", - new MapSqlParameterSource("unames", unames), - new UserMapper()); + return usersRepository.findAllByNameIn(unames).map(EntityUtils::entityToUser).collect(Collectors.toList()); } @Transactional(readOnly = true) @Override public List<User> getUsersByID(final Collection<Integer> uids) { - if (CollectionUtils.isEmpty(uids)) - return Collections.emptyList(); - - return getNamedParameterJdbcTemplate().query( - "SELECT id, nick, banned, lang FROM users WHERE id IN (:ids)", - new MapSqlParameterSource("ids", uids), - new UserMapper()); + return usersRepository.findAllByIdIn(uids).map(EntityUtils::entityToUser).collect(Collectors.toList()); } @Transactional(readOnly = true) @@ -237,57 +180,11 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { @Transactional(readOnly = true) @Override - public int getUIDbyJID(final String jid) { - if (StringUtils.isNotBlank(jid)) { - List<Integer> list = getJdbcTemplate().queryForList( - "SELECT user_id FROM jids WHERE jid = ?", Integer.class, jid); - - if (!list.isEmpty()) - return list.get(0); - } - return 0; - } - - @Transactional(readOnly = true) - @Override - public int getUIDbyName(final String uname) { - if (StringUtils.isNotBlank(uname)) { - List<Integer> list = getJdbcTemplate().queryForList( - "SELECT id FROM users WHERE nick = ?", Integer.class, uname); - - if (!list.isEmpty()) - return list.get(0); - } - return 0; - } - - @Transactional(readOnly = true) - @Override - public int getUIDbyHash(final String hash) { - if (StringUtils.isNotBlank(hash)) { - List<Integer> list = getJdbcTemplate().queryForList( - "SELECT user_id FROM logins WHERE hash = ?", Integer.class, hash); - - if (!list.isEmpty()) - return list.get(0); - } - return 0; - } - - @Transactional(readOnly = true) - @Override public com.juick.User getUserByHash(final String hash) { if (StringUtils.isNotBlank(hash)) { - List<User> list = getJdbcTemplate().query( - "SELECT logins.user_id, users.nick, users.banned, users.lang FROM logins " + - "INNER JOIN users ON logins.user_id = users.id WHERE logins.hash = ?", - new UserMapper(), - hash); - - if (!list.isEmpty()) { - User user = list.get(0); - user.setAuthHash(hash); - return user; + Optional<UserEntity> entityUser = usersRepository.findByLogins_Hash(hash); + if (entityUser.isPresent()) { + return EntityUtils.entityToUser(entityUser.get()); } } return AnonymousUser.INSTANCE; @@ -295,49 +192,36 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { @Transactional @Override - public String getHashByUID(final int uid) { - List<String> list = getJdbcTemplate().queryForList( - "SELECT hash FROM logins WHERE user_id = ?", String.class, uid); - - if (list.isEmpty()) { - String hash = RandomStringUtils.randomAlphanumeric(16).toUpperCase(); - getJdbcTemplate().update("INSERT INTO logins(user_id, hash) VALUES (?, ?)", uid, hash); - return hash; + public String getHashForUser(final User user) { + UserEntity entityUser = usersRepository.findById(user.getUid()).orElseThrow(IllegalStateException::new); + if (entityUser.getLogins().size() > 0) { + return entityUser.getLogins().stream().findFirst().orElseThrow(IllegalStateException::new).getHash(); } - return list.get(0); + + LoginEntity newHash = new LoginEntity(); + newHash.setUser(entityUser); + newHash.setHash(RandomStringUtils.randomAlphanumeric(16).toUpperCase()); + entityUser.getLogins().add(newHash); + return getHashForUser(EntityUtils.entityToUser(usersRepository.save(entityUser))); } @Transactional(readOnly = true) @Override - public int checkPassword(final String username, final String password) { - if (StringUtils.isNotBlank(username)) { - List<User> list = getJdbcTemplate().query( - "SELECT id, nick, banned, passw FROM users WHERE nick = ?", - (rs, rowNum) -> { - User user = new User(); - user.setUid(rs.getInt(1)); - user.setName(rs.getString(2)); - user.setBanned(rs.getBoolean(3)); - user.setCredentials(rs.getString(4)); - return user; - }, - username); - - if (!list.isEmpty()) { - User user = list.get(0); - if (Objects.equals(password, user.getCredentials())) - return user.getUid(); - } - } - return -1; + public User checkPassword(final String username, final String password) { + Optional<UserEntity> userEntity = usersRepository.findByNameAndPassword(username, password); + if (userEntity.isPresent()) { + return EntityUtils.entityToUser(userEntity.get()); + }; + return AnonymousUser.INSTANCE; } @Transactional @Override public boolean updatePassword(final User user, final String newPassword) { - return user != null && - user.getUid() > 0 && - getJdbcTemplate().update("UPDATE users SET passw = ? WHERE id = ?", newPassword, user.getUid()) > 0; + UserEntity entityUser = usersRepository.findById(user.getUid()).orElseThrow(IllegalStateException::new); + entityUser.setPassword(newPassword); + usersRepository.save(entityUser); + return true; } @Transactional(readOnly = true) @@ -398,17 +282,6 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { @Transactional(readOnly = true) @Override - public boolean getCanMedia(final int uid) { - List<Integer> list = getJdbcTemplate().queryForList( - "SELECT users.lastphoto - UNIX_TIMESTAMP() FROM users WHERE id = ?", - Integer.class, - uid); - - return !list.isEmpty() && list.get(0) < 3600; - } - - @Transactional(readOnly = true) - @Override public boolean isInWL(final int uid, final int check) { List<Integer> list = getJdbcTemplate().queryForList( "SELECT 1 FROM wl_users WHERE user_id = ? AND wl_user_id = ?", @@ -617,8 +490,12 @@ public class UserServiceImpl extends BaseJdbcService implements UserService { @Transactional(readOnly = true) @Override - public List<String> getEmails(final User user) { - return getJdbcTemplate().queryForList("SELECT email FROM emails WHERE user_id=?", String.class, user.getUid()); + public Collection<String> getEmails(final User user) { + Optional<UserEntity> entityUser = usersRepository.findById(user.getUid()); + if (entityUser.isPresent()) { + return entityUser.get().getEmails().stream().map(EmailEntity::getEmail).collect(Collectors.toList()); + } + return Collections.emptyList(); } @Transactional(readOnly = true) diff --git a/juick-server/src/main/java/com/juick/service/data/MessagesRepository.java b/juick-server/src/main/java/com/juick/service/data/MessagesRepository.java new file mode 100644 index 00000000..df8e8274 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/MessagesRepository.java @@ -0,0 +1,7 @@ +package com.juick.service.data; + +import com.juick.service.data.entities.MessageEntity; +import org.springframework.data.repository.PagingAndSortingRepository; + +public interface MessagesRepository extends PagingAndSortingRepository<MessageEntity, Integer> { +} diff --git a/juick-server/src/main/java/com/juick/service/data/TextRepository.java b/juick-server/src/main/java/com/juick/service/data/TextRepository.java new file mode 100644 index 00000000..f02a4c0d --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/TextRepository.java @@ -0,0 +1,7 @@ +package com.juick.service.data; + +import com.juick.service.data.entities.TextEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TextRepository extends JpaRepository<TextEntity, Integer> { +} diff --git a/juick-server/src/main/java/com/juick/service/data/UsersRepository.java b/juick-server/src/main/java/com/juick/service/data/UsersRepository.java new file mode 100644 index 00000000..b0a106e3 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/UsersRepository.java @@ -0,0 +1,23 @@ +package com.juick.service.data; + +import com.juick.service.data.entities.UserEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.Optional; +import java.util.stream.Stream; + +@Repository +public interface UsersRepository extends CrudRepository<UserEntity, String> { + Optional<UserEntity> findById(Integer uid); + Optional<UserEntity> findByName(String name); + Optional<UserEntity> findByNameAndPassword(String name, String password); + Optional<UserEntity> findByEmailsEmail(String email); + Stream<UserEntity> findAllByNameIn(Collection<String> names); + Stream<UserEntity> findAllByIdIn(Collection<Integer> uids); + Optional<UserEntity> findByFacebookIds_FacebookId(Long facebookId); + Optional<UserEntity> findByVkIds_VkId(Long vkId); + Optional<UserEntity> findByLogins_Hash(String hash); + Optional<UserEntity> findByTgIds_Identifier(Long telegramId); +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java new file mode 100644 index 00000000..d9407f84 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java @@ -0,0 +1,20 @@ +package com.juick.service.data.entities; + +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MappedSuperclass; + +@MappedSuperclass +public class BaseMessagePropertyEntity { + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "message_id") + private MessageEntity message; + public MessageEntity getMessage() { + return message; + } + + public void setMessage(MessageEntity message) { + this.message = message; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java new file mode 100644 index 00000000..a5b1909d --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java @@ -0,0 +1,20 @@ +package com.juick.service.data.entities; + +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MappedSuperclass; + +@MappedSuperclass +public class BaseUserPropertyEntity { + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private UserEntity user; + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java new file mode 100644 index 00000000..d65b5da6 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java @@ -0,0 +1,20 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "emails") +public class EmailEntity extends BaseUserPropertyEntity { + @Id + @Column(name = "email", columnDefinition = "char(64)") + @GeneratedValue(strategy = GenerationType.AUTO) + private String email; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java new file mode 100644 index 00000000..587651d9 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java @@ -0,0 +1,20 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "facebook") +public class FacebookEntity extends BaseUserPropertyEntity { + @Id + @Column(name = "fb_id", columnDefinition = "bigint(20)") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long facebookId; + + public Long getFacebookId() { + return facebookId; + } + + public void setFacebookId(Long facebookId) { + this.facebookId = facebookId; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java new file mode 100644 index 00000000..6799073f --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java @@ -0,0 +1,19 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "logins") +public class LoginEntity extends BaseUserPropertyEntity { + @Id + @Column(name = "hash", columnDefinition = "char(16)") + private String hash; + + public String getHash() { + return hash; + } + + public void setHash(String hash) { + this.hash = hash; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java new file mode 100644 index 00000000..fdbdbdc0 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java @@ -0,0 +1,81 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.Instant; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "messages") +public class MessageEntity implements Serializable { + @Id + @Column(name = "message_id", columnDefinition = "int(10) unsigned auto_increment", nullable = false, unique = true) + @GeneratedValue(strategy = GenerationType.AUTO) + private Integer id; + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "message") + private Set<TagEntity> tags = new HashSet<>(); + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "message") + private Set<ReplyEntity> replies = new HashSet<>(); + + @OneToOne(cascade = CascadeType.ALL, mappedBy = "message") + private TextEntity textEntity; + + @ManyToOne(cascade = CascadeType.ALL) + private UserEntity user; + + @Column(name = "ts") + private Instant ts; + + public MessageEntity() { + this.textEntity = new TextEntity(this); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Set<TagEntity> getTags() { + return tags; + } + + public void setTags(Set<TagEntity> tags) { + this.tags = tags; + } + + public Set<ReplyEntity> getReplies() { + return replies; + } + + public void setReplies(Set<ReplyEntity> replies) { + this.replies = replies; + } + + public String getText() { + return textEntity.getText(); + } + + public void setText(String text) { + this.textEntity.setText(text); + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public Instant getTimestamp() { + return ts; + } + + public void setTimestamp(Instant ts) { + this.ts = ts; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java new file mode 100644 index 00000000..65a38576 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java @@ -0,0 +1,31 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "replies") +public class ReplyEntity extends BaseMessagePropertyEntity { + @Id + @Column(name = "reply_id", columnDefinition = "smallint") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long replyId; + @Column(name = "txt", columnDefinition = "clob") + private + String text; + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Long getReplyId() { + return replyId; + } + + public void setReplyId(Long replyId) { + this.replyId = replyId; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java new file mode 100644 index 00000000..22196562 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java @@ -0,0 +1,15 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "messages_tags") +public class TagEntity extends BaseMessagePropertyEntity { + @Id + @Column(name = "tag_id", columnDefinition = "int(10)") + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + @OneToOne(cascade = CascadeType.ALL) + @PrimaryKeyJoinColumn + private TagNameEntity tagName; +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java new file mode 100644 index 00000000..4540a45e --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java @@ -0,0 +1,30 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "tags") +public class TagNameEntity { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "tag_id") + private int id; + @Column(name = "name", columnDefinition = "varchar(70)") + private String name; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java new file mode 100644 index 00000000..e851b00e --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java @@ -0,0 +1,20 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "telegram") +public class TelegramEntity extends BaseUserPropertyEntity { + @Id + @Column(name = "tg_id", columnDefinition = "bigint(20)") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long identifier; + + public Long getIdentifier() { + return identifier; + } + + public void setIdentifier(Long identifier) { + this.identifier = identifier; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java new file mode 100644 index 00000000..ba4b9146 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java @@ -0,0 +1,42 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; +import java.io.Serializable; + +@Entity +@Table(name = "messages_txt") +public class TextEntity implements Serializable { + + @Id + @Column(name = "message_id", columnDefinition = "int(10)") + private Integer id; + + @Column(name = "txt", columnDefinition = "clob") + private String text; + + @OneToOne(fetch = FetchType.LAZY) + @MapsId + @JoinColumn(name = "message_id", foreignKey = @ForeignKey(name = "message_id")) + private MessageEntity message; + + public TextEntity() { + super(); + } + + public TextEntity(MessageEntity message) { + this(); + this.message = message; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public MessageEntity getMessage() { + return message; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java new file mode 100644 index 00000000..50a72bdb --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java @@ -0,0 +1,109 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "users") +public class UserEntity { + @Id + @Column(name = "id", columnDefinition = "int(10) unsigned", nullable = false, unique = true) + @GeneratedValue(strategy = GenerationType.AUTO) + private Integer id; + + @Column(name = "nick", columnDefinition = "char(64)") + private String name; + + @Column(name = "passw", columnDefinition = "char(32)") + private String password; + + @Column(name = "banned", columnDefinition = "tinyint(1)") + private boolean banned; + + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user") + private Set<EmailEntity> emails = new HashSet<>(); + + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user") + private Set<FacebookEntity> facebookIds = new HashSet<>(); + + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user") + private Set<VKEntity> vkIds = new HashSet<>(); + + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user") + private Set<LoginEntity> logins = new HashSet<>(); + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user") + private Set<TelegramEntity> tgIds = new HashSet<>(); + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Integer getId() { + return id; + } + + public void setId(Integer uid) { + this.id = uid; + } + + public boolean isBanned() { + return banned; + } + + public void setBanned(boolean banned) { + this.banned = banned; + } + + public Set<EmailEntity> getEmails() { + return emails; + } + + public void setEmails(Set<EmailEntity> emails) { + this.emails = emails; + } + + public Set<FacebookEntity> getFacebookIds() { + return facebookIds; + } + + public void setFacebookIds(Set<FacebookEntity> facebookIds) { + this.facebookIds = facebookIds; + } + + public Set<VKEntity> getVkIds() { + return vkIds; + } + + public void setVkIds(Set<VKEntity> vkIds) { + this.vkIds = vkIds; + } + + public Set<LoginEntity> getLogins() { + return logins; + } + + public void setLogins(Set<LoginEntity> logins) { + this.logins = logins; + } + + public Set<TelegramEntity> getTgIds() { + return tgIds; + } + + public void setTgIds(Set<TelegramEntity> tgIds) { + this.tgIds = tgIds; + } +} diff --git a/juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java new file mode 100644 index 00000000..47b5c969 --- /dev/null +++ b/juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java @@ -0,0 +1,20 @@ +package com.juick.service.data.entities; + +import javax.persistence.*; + +@Entity +@Table(name = "vk") +public class VKEntity extends BaseUserPropertyEntity { + @Id + @Column(name = "vk_id", columnDefinition = "bigint(20)") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long vkId; + + public Long getVkId() { + return vkId; + } + + public void setVkId(Long vkId) { + this.vkId = vkId; + } +} |