diff options
Diffstat (limited to 'juick-server/src')
3 files changed, 106 insertions, 30 deletions
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 5019ef0cc..422c9616b 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<Integer> getMyFeed(final int uid, final int before) { - List<Integer> 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<? AND (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, 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<? ORDER BY message_id DESC LIMIT 20", Integer.class, - uid, before)); - } else { - mids.addAll(getJdbcTemplate().queryForList("SELECT message_id FROM messages " + - "WHERE user_id=? ORDER BY message_id DESC LIMIT 20", Integer.class, uid)); - } + SqlParameterSource sqlParameterSource = new MapSqlParameterSource() + .addValue("uid", uid) + .addValue("before", before); - mids.sort(Collections.reverseOrder()); - int remove = mids.size() - 20; - for (int i = 0; i < remove; i++) { - mids.remove(20); - } + List<Integer> 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; } diff --git a/juick-server/src/test/java/com/juick/configuration/RepositoryConfiguration.java b/juick-server/src/test/java/com/juick/configuration/RepositoryConfiguration.java new file mode 100644 index 000000000..14f91df87 --- /dev/null +++ b/juick-server/src/test/java/com/juick/configuration/RepositoryConfiguration.java @@ -0,0 +1,65 @@ +package com.juick.configuration; + +import ch.vorburger.exec.ManagedProcessException; +import ch.vorburger.mariadb4j.DB; +import com.juick.service.search.SearchService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import java.util.Collections; +import java.util.List; + +/** + * Created by aalexeev on 11/25/16. + */ +@Configuration +@ComponentScan(basePackages = "com.juick.service") +public class RepositoryConfiguration { + + @Bean(destroyMethod = "stop") + DB db() throws ManagedProcessException { + DB db = DB.newEmbeddedDB(33306); + + db.start(); + db.createDB("juick"); + db.source("schema.sql"); + + return db; + } + + @Bean + public DriverManagerDataSource dataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://localhost:33306/juick?autoReconnect=true&user=root"); + + return dataSource; + } + + @Bean + public JdbcTemplate jdbcTemplate() { + return new JdbcTemplate(dataSource()); + } + + @Bean + public SearchService emptySearchService() { + return new SearchService() { + @Override + public void setMaxResult(int maxResult) { + } + + @Override + public List<Integer> searchInAllMessages(String searchString, int messageIdBefore) { + return Collections.emptyList(); + } + + @Override + public List<Integer> searchByStringAndUser(String searchString, int userId, int messageIdBefore) { + return Collections.emptyList(); + } + }; + } +} diff --git a/juick-server/src/test/java/com/juick/service/MessageServiceTest.java b/juick-server/src/test/java/com/juick/service/MessageServiceTest.java new file mode 100644 index 000000000..5f2c2b054 --- /dev/null +++ b/juick-server/src/test/java/com/juick/service/MessageServiceTest.java @@ -0,0 +1,23 @@ +package com.juick.service; + +import com.juick.configuration.RepositoryConfiguration; +import org.junit.Test; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; + +import javax.inject.Inject; + +/** + * Created by aalexeev on 11/25/16. + */ +@ContextConfiguration(classes = RepositoryConfiguration.class) +public class MessageServiceTest extends AbstractJUnit4SpringContextTests { + @Inject + private MessagesService messagesService; + + + @Test + public void getMyFeed() { + messagesService.getMyFeed(1, 1000000); + } +} |