aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--juick-api/src/main/java/com/juick/api/controllers/Messages.java23
-rw-r--r--juick-server/src/main/java/com/juick/service/MessagesService.java2
-rw-r--r--juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java28
3 files changed, 32 insertions, 21 deletions
diff --git a/juick-api/src/main/java/com/juick/api/controllers/Messages.java b/juick-api/src/main/java/com/juick/api/controllers/Messages.java
index 584ff3cf..7348c54a 100644
--- a/juick-api/src/main/java/com/juick/api/controllers/Messages.java
+++ b/juick-api/src/main/java/com/juick/api/controllers/Messages.java
@@ -69,6 +69,7 @@ public class Messages {
public ResponseEntity<List<com.juick.Message>> getMessages(
@RequestParam(required = false) String uname,
@RequestParam(defaultValue = "0") int before_mid,
+ @RequestParam(required = false) String withrecommended,
@RequestParam(required = false) String popular,
@RequestParam(required = false) String media,
@RequestParam(required = false) String tag) {
@@ -88,6 +89,8 @@ public class Messages {
} else {
return NOT_FOUND;
}
+ } else if (!StringUtils.isEmpty(withrecommended)) {
+ mids = messagesService.getUserBlogWithRecommendations(user.getUid(), 0, before_mid);
} else {
mids = messagesService.getUserBlog(user.getUid(), 0, before_mid);
}
@@ -131,26 +134,6 @@ public class Messages {
return NOT_FOUND;
}
- @RequestMapping("/messages/recommended")
- public ResponseEntity<List<com.juick.Message>> doGetRecommended(
- @RequestParam(defaultValue = "0") int before_mid) {
- User visitor = UserUtils.getCurrentUser();
- int vuid = visitor.getUid();
- if (vuid == 0) {
- return FORBIDDEN;
- }
- List<Integer> mids = messagesService.getUserRecommendations(vuid, before_mid);
- if (mids != null && !mids.isEmpty()) {
- List<com.juick.Message> msgs = messagesService.getMessages(mids);
- if (msgs != null && !msgs.isEmpty()) {
- return ResponseEntity.ok(msgs);
- } else {
- return FORBIDDEN;
- }
- }
- return NOT_FOUND;
- }
-
@RequestMapping("/messages/set_privacy")
@ResponseBody
public ResponseEntity<Status> doSetPrivacy(
diff --git a/juick-server/src/main/java/com/juick/service/MessagesService.java b/juick-server/src/main/java/com/juick/service/MessagesService.java
index cad0f860..ad7774b7 100644
--- a/juick-server/src/main/java/com/juick/service/MessagesService.java
+++ b/juick-server/src/main/java/com/juick/service/MessagesService.java
@@ -62,6 +62,8 @@ public interface MessagesService {
List<Integer> getUserTag(int uid, int tid, int privacy, int before);
+ List<Integer> getUserBlogWithRecommendations(int uid, int privacy, int before);
+
List<Integer> getUserRecommendations(int uid, int before);
List<Integer> getUserPhotos(int uid, int privacy, int before);
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 495940f6..0a35cee9 100644
--- a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
@@ -198,7 +198,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
@Override
public boolean recommendMessage(final int mid, final int vuid) {
boolean res = getJdbcTemplate().update(
- "INSERT IGNORE INTO favorites(user_id, message_id) VALUES (?, ?)",
+ "INSERT IGNORE INTO favorites(user_id, message_id, ts) VALUES (?, ?, NOW())",
vuid, mid) == 1;
if (res)
@@ -590,6 +590,32 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
@Transactional(readOnly = true)
@Override
+ public List<Integer> getUserBlogWithRecommendations(final int uid, final int privacy, final int before) {
+ SqlParameterSource sqlParameterSource = new MapSqlParameterSource()
+ .addValue("uid", uid)
+ .addValue("privacy", privacy)
+ .addValue("before", before);
+
+ return getNamedParameterJdbcTemplate().queryForList(
+ "SELECT message_id FROM " +
+ "(SELECT message_id FROM favorites " +
+ " WHERE user_id = :uid " +
+ (before > 0 ?
+ " AND message_id < :before " : StringUtils.EMPTY) +
+ " ORDER BY message_id DESC LIMIT 20) as r" +
+ " UNION ALL " +
+ "SELECT message_id FROM " +
+ "(SELECT message_id FROM messages WHERE user_id = :uid" +
+ (before > 0 ?
+ " AND message_id < :before" : StringUtils.EMPTY) +
+ " AND privacy >= :privacy ORDER BY message_id DESC LIMIT 20) as m " +
+ "ORDER BY message_id DESC LIMIT 20",
+ sqlParameterSource,
+ Integer.class);
+ }
+
+ @Transactional(readOnly = true)
+ @Override
public List<Integer> getUserRecommendations(final int uid, final int before) {
SqlParameterSource sqlParameterSource = new MapSqlParameterSource()
.addValue("uid", uid)