package com.juick.service; import com.juick.server.helpers.ApplicationStatus; import org.apache.commons.lang3.tuple.Pair; 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; /** * Created by aalexeev on 11/13/16. */ @Repository public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostService { @Inject public CrosspostServiceImpl(JdbcTemplate jdbcTemplate) { super(jdbcTemplate, null); } @Transactional(readOnly = true) @Override public Optional> getTwitterTokens(final int uid) { List>> list = getJdbcTemplate().query( "SELECT access_token,access_token_secret FROM twitter WHERE user_id = ? AND crosspost = 1", (rs, num) -> Optional.of(Pair.of(rs.getString(1), rs.getString(2))), uid); return list.isEmpty() ? Optional.empty() : list.get(0); } @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; } @Transactional(readOnly = true) @Override public Optional getFacebookToken(final int uid) { List list = getJdbcTemplate().queryForList( "SELECT access_token FROM facebook WHERE user_id = ? AND access_token IS NOT NULL AND crosspost = 1", String.class, uid); return list.isEmpty() ? Optional.empty() : Optional.of(list.get(0)); } @Transactional(readOnly = true) @Override public ApplicationStatus getFbCrossPostStatus(final int uid) { List list = getJdbcTemplate().query( "SELECT 1, crosspost FROM facebook WHERE user_id = ? LIMIT 1", (rs, num) -> { ApplicationStatus status = new ApplicationStatus(); status.setConnected(rs.getInt(1) > 0); status.setCrosspostEnabled(rs.getBoolean(2)); return status; }, uid); return list.isEmpty() ? new ApplicationStatus() : list.get(0); } @Transactional @Override public boolean enableFBCrosspost(Integer uid) { return getJdbcTemplate().update("UPDATE facebook SET crosspost=1 WHERE user_id=?", uid) > 0 && getJdbcTemplate().update( "INSERT INTO subscr_users(user_id,suser_id,jid,active) VALUES (?,5863,'juick@facebook.juick.com',1)", uid) > 0; } @Transactional @Override public void disableFBCrosspost(Integer uid) { getJdbcTemplate().update("UPDATE facebook SET crosspost=0 WHERE user_id=?", uid); // TODO: stop using magic numbers for system users getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=5863", uid); } @Transactional(readOnly = true) @Override public String getTwitterName(final int uid) { List list = getJdbcTemplate().queryForList( "SELECT uname FROM twitter WHERE user_id = ?", String.class, uid); return list.isEmpty() ? "" : list.get(0); } @Transactional(readOnly = true) @Override public String getTelegramName(final int uid) { List list = getJdbcTemplate().queryForList( "SELECT tg_name FROM telegram WHERE user_id = ?", String.class, uid); return list.isEmpty() ? "" : list.get(0); } @Transactional(readOnly = true) @Override public Optional> getVkTokens(final int uid) { List>> 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); return list.isEmpty() ? Optional.empty() : list.get(0); } @Transactional @Override public void deleteVKUser(Integer uid) { getJdbcTemplate().update("DELETE FROM vk WHERE user_id=?", uid); } }