package com.juick.service; import com.juick.User; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; import java.util.List; import java.util.Optional; import java.util.UUID; @Repository public class MessengerServiceImpl extends BaseJdbcService implements MessengerService { @Inject protected MessengerServiceImpl(JdbcTemplate jdbcTemplate) { super(jdbcTemplate, null); } @Transactional(readOnly = true) @Override public Integer getUserId(String senderId) { List list = getJdbcTemplate().queryForList( "SELECT id FROM users INNER JOIN messenger " + "ON messenger.user_id = users.id WHERE messenger.sender_id=?", Integer.class, senderId); return list.isEmpty() ? 0 : list.get(0); } @Transactional(readOnly = true) @Override public Optional getSenderId(User user) { List list = getJdbcTemplate().queryForList( "SELECT sender_id FROM messenger " + "WHERE user_id=?", String.class, user.getUid()); return list.isEmpty() ? Optional.empty() : Optional.of(list.get(0)); } @Transactional @Override public boolean createMessengerUser(String senderId, String displayName) { return getJdbcTemplate().update( "INSERT INTO messenger(sender_id, display_name, loginhash) VALUES(?,?,?)", senderId, displayName, UUID.randomUUID().toString()) > 0; } @Transactional(readOnly = true) @Override public String getDisplayName(String hash) { try { return getJdbcTemplate().queryForObject("SELECT display_name FROM messenger WHERE loginhash=?", String.class, hash); } catch (EmptyResultDataAccessException e) { return null; } } @Transactional @Override public String getSignUpHash(final String senderId, final String username) { List list = getJdbcTemplate().queryForList( "SELECT loginhash FROM messenger WHERE sender_id = ? AND user_id IS NULL", String.class, senderId); if (list.isEmpty()) { String hash = UUID.randomUUID().toString(); getJdbcTemplate().update( "INSERT INTO messenger(sender_id, loginhash, display_name) VALUES (?, ?, ?)", senderId, hash, username); return hash; } return list.get(0); } @Transactional @Override public boolean linkMessengerUser(String hash, int uid) { return getJdbcTemplate().update("UPDATE messenger SET user_id=?, loginhash=NULL WHERE loginhash=?", uid, hash) > 0; } }