/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.juick.server; import com.juick.User; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.StringUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author ugnich */ public class SubscriptionsQueries { private static final Logger logger = Logger.getLogger(SubscriptionsQueries.class.getName()); public static List getJIDSubscribedToUser(Connection sql, int uid, boolean friendsonly) { List jids = new ArrayList<>(); PreparedStatement stmt = null; ResultSet rs = null; try { if (friendsonly == false) { stmt = sql.prepareStatement("SELECT jids.jid FROM subscr_users INNER JOIN jids ON (subscr_users.user_id=? AND subscr_users.suser_id=jids.user_id) WHERE jids.active=1"); stmt.setInt(1, uid); } else { stmt = sql.prepareStatement("SELECT jids.jid FROM subscr_users INNER JOIN jids ON (subscr_users.user_id=? AND subscr_users.suser_id=jids.user_id) WHERE jids.active=1 AND jids.user_id IN (SELECT wl_user_id FROM wl_users WHERE user_id=?)"); stmt.setInt(1, uid); stmt.setInt(2, uid); } rs = stmt.executeQuery(); rs.beforeFirst(); while (rs.next()) { jids.add(rs.getString(1)); } } catch (SQLException e) { logger.log(Level.SEVERE, "sql exception", e); } finally { Utils.finishSQL(rs, stmt); } return jids; } public static List getSubscribedUsers(JdbcTemplate sql, int uid, int mid) { List userids = UserQueries.getUserRead(sql, uid); Set set = new HashSet<>(); set.addAll(userids); List tags = MessagesQueries.getMessageTagsIDs(sql, mid); if (tags.size() > 0) { List tagUsers = sql.queryForList("SELECT suser_id FROM subscr_tags " + "WHERE tag_id IN (" + StringUtils.arrayToCommaDelimitedString(tags.toArray()) + ") AND suser_id!=" + uid, Integer.class); set.addAll(tagUsers); } return UserQueries.getUsersByID(sql, new ArrayList<>(set)); } public static List getUsersSubscribedToComments(JdbcTemplate sql, int mid, int ignore_uid) { List userids = sql.queryForList("SELECT suser_id FROM subscr_messages WHERE message_id=? AND suser_id!=?", new Object[] {mid, ignore_uid}, Integer.class); if (userids.size() > 0) { return UserQueries.getUsersByID(sql, userids); } else { return new ArrayList<>(); } } public static List getUsersSubscribedToUserRecommendations(JdbcTemplate sql, int uid, int mid, int muid) { List tags = MessagesQueries.getMessageTagsIDs(sql, mid); String query = "SELECT user_id IN (SELECT suser_id FROM subscr_users WHERE user_id=" + uid + ")"; query += " AND user_id NOT IN (SELECT user_id FROM bl_users WHERE bl_user_id=" + muid + ")"; query += " AND user_id NOT IN (SELECT suser_id FROM subscr_users WHERE user_id=" + muid + ")"; query += " AND user_id NOT IN (SELECT suser_id FROM subscr_messages WHERE message_id=" + mid + ")"; query += " AND user_id NOT IN (SELECT user_id FROM favorites WHERE message_id=" + mid + ")"; query += " AND user_id NOT IN (SELECT subscr_users.suser_id FROM subscr_users INNER JOIN favorites ON (favorites.message_id=" + mid + " AND subscr_users.user_id=favorites.user_id AND favorites.user_id!=" + uid + "))"; if (!tags.isEmpty()) { String tagsStr = Utils.convertArrayInt2String(tags); query += " AND user_id NOT IN (SELECT suser_id FROM subscr_tags WHERE tag_id IN (" + tagsStr + "))"; query += " AND user_id NOT IN (SELECT user_id FROM bl_tags WHERE tag_id IN (" + tagsStr + "))"; } List userids = sql.queryForList(query, Integer.class); return UserQueries.getUsersByID(sql, userids); } public static boolean subscribeMessage(JdbcTemplate sql, int mid, int vuid) { return sql.update("INSERT IGNORE INTO subscr_messages(suser_id,message_id) VALUES (" + vuid + "," + mid + ")") == 1; } }