From c343add1f073437e8f2e9506b51ea1eab0f407a2 Mon Sep 17 00:00:00 2001 From: Alexander Alexeev Date: Fri, 25 Nov 2016 04:07:29 +0700 Subject: messageService.getMyFeed() is fixed, simple test is added --- .../com/juick/service/MessagesServiceImpl.java | 48 ++++++++-------------- 1 file changed, 18 insertions(+), 30 deletions(-) (limited to 'juick-server/src/main/java') 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 5019ef0c..422c9616 100644 --- a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java +++ b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java @@ -459,37 +459,25 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ @Transactional(readOnly = true) @Override public List getMyFeed(final int uid, final int before) { - List mids; - if (before > 0) { - mids = getJdbcTemplate().queryForList("SELECT message_id FROM messages " + - "INNER JOIN subscr_users ON (subscr_users.suser_id=? AND subscr_users.user_id=messages.user_id) " + - "WHERE message_id=0 OR (privacy>=-2 AND privacy<=-1 AND messages.user_id " + - "IN (SELECT user_id FROM wl_users WHERE wl_user_id=?))) ORDER BY message_id DESC LIMIT 20", - Integer.class, uid, before, uid); - } else { - mids = getJdbcTemplate().queryForList("SELECT message_id FROM messages " + - "INNER JOIN subscr_users ON (subscr_users.suser_id=? " + - "AND subscr_users.user_id=messages.user_id) " + - "WHERE (privacy>=0 OR (privacy>=-2 AND privacy<=-1 AND messages.user_id " + - "IN (SELECT user_id FROM wl_users WHERE wl_user_id=?))) ORDER BY message_id DESC LIMIT 20", - Integer.class, uid, uid); - } - - - if (before > 0) { - mids.addAll(getJdbcTemplate().queryForList("SELECT message_id FROM messages " + - "WHERE user_id=? AND message_id mids = getNamedParameterJdbcTemplate().queryForList( + "(SELECT message_id FROM messages " + + " INNER JOIN subscr_users ON (subscr_users.suser_id = :uid AND subscr_users.user_id = messages.user_id) " + + " WHERE " + + (before > 0 ? + " message_id < :before AND " : "") + + " (privacy >= 0 OR (privacy >= -2 AND privacy <= -1" + + " AND EXISTS (SELECT 1 FROM wl_users w WHERE w.wl_user_id = :uid and w.user_id = messages.user_id)))) " + + " UNION " + + " (SELECT message_id FROM messages WHERE user_id=:uid " + + (before > 0 ? + " AND message_id < :before " : "") + + ") ORDER BY message_id ASC LIMIT 20", + sqlParameterSource, + Integer.class); return mids; } -- cgit v1.2.3