aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/service/TagServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/service/TagServiceImpl.java')
-rw-r--r--src/main/java/com/juick/service/TagServiceImpl.java67
1 files changed, 40 insertions, 27 deletions
diff --git a/src/main/java/com/juick/service/TagServiceImpl.java b/src/main/java/com/juick/service/TagServiceImpl.java
index 81c0c3ba..1ae98c0f 100644
--- a/src/main/java/com/juick/service/TagServiceImpl.java
+++ b/src/main/java/com/juick/service/TagServiceImpl.java
@@ -36,6 +36,9 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.time.Instant;
+import java.time.ZoneOffset;
+import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -64,8 +67,7 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
},
tid);
- return list.isEmpty() ?
- null : list.get(0);
+ return list.isEmpty() ? null : list.get(0);
}
@Transactional
@@ -84,8 +86,7 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
},
tag);
- Tag ret = list.isEmpty() ?
- null : list.get(0);
+ Tag ret = list.isEmpty() ? null : list.get(0);
if (ret == null && autoCreate) {
ret = new Tag(tag);
@@ -97,8 +98,9 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
@Override
public List<Tag> getTags(Stream<String> tags, final boolean autoCreate) {
- return tags.filter(StringUtils::isNotBlank).map(tag -> getTag(tag, autoCreate)).filter(Objects::nonNull).distinct()
- .collect(Collectors.toList());
+ return tags.filter(StringUtils::isNotBlank).map(tag -> getTag(tag, autoCreate)).filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
}
@Transactional(readOnly = true)
@@ -124,7 +126,8 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
},
holder);
- return holder.getKey().intValue();
+ return holder.getKeys().size() > 1 ? ((Number) holder.getKeys().get("tag_id")).intValue()
+ : holder.getKey().intValue();
}
private class TagStatsMapper implements RowMapper<TagStats> {
@@ -164,19 +167,26 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
@Override
public List<String> getPopularTags() {
return getJdbcTemplate().queryForList(
- "select name from tags where noindex=0 order by stat_messages desc limit 20", String.class);
+ "select name from tags where noindex=false order by stat_messages desc limit 20", String.class);
}
@Transactional(readOnly = true)
@Override
public List<TagStats> getTagStats() {
- return getJdbcTemplate().query(
- "SELECT tags.name,COUNT(DISTINCT messages.user_id) AS cnt " +
- "FROM (messages INNER JOIN messages_tags ON (messages.ts>TIMESTAMPADD(DAY,-14,NOW()) " +
- "AND messages.message_id=messages_tags.message_id)) " +
- "INNER JOIN tags ON messages_tags.tag_id=tags.tag_id " +
- "WHERE tags.tag_id NOT IN (SELECT tag_id FROM tags_ignore) " +
- "GROUP BY tags.tag_id HAVING cnt > 1 ORDER BY cnt DESC LIMIT 20", new TagStatsMapper());
+ var ts = Instant.now().minus(14, ChronoUnit.DAYS);
+ var sql = """
+ SELECT tags.name,COUNT(DISTINCT messages.user_id) AS cnt
+ FROM (messages INNER JOIN messages_tags ON (messages.ts > :ts
+ AND messages.message_id=messages_tags.message_id))
+ INNER JOIN tags ON messages_tags.tag_id=tags.tag_id
+ WHERE tags.tag_id NOT IN (SELECT tag_id FROM tags_ignore)
+ GROUP BY tags.tag_id HAVING COUNT(DISTINCT messages.user_id) > 1
+ ORDER BY cnt DESC LIMIT 20
+ """;
+ return getNamedParameterJdbcTemplate()
+ .query(sql, new MapSqlParameterSource()
+ .addValue("ts", ts.atOffset(ZoneOffset.UTC), java.sql.Types.TIMESTAMP_WITH_TIMEZONE),
+ new TagStatsMapper());
}
@Transactional
@@ -202,17 +212,19 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
new MapSqlParameterSource().addValue("ids", idsForDelete).addValue("mid", mid));
List<Tag> addedTags = newTags.stream().filter(t -> !currentTags.contains(t)).collect(Collectors.toList());
- getJdbcTemplate().batchUpdate("INSERT INTO messages_tags(message_id,tag_id) VALUES (?,?)", new BatchPreparedStatementSetter() {
- @Override
- public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException {
- ps.setInt(1, mid);
- ps.setInt(2, addedTags.get(i).TID);
- }
- @Override
- public int getBatchSize() {
- return addedTags.size();
- }
- });
+ getJdbcTemplate().batchUpdate("INSERT INTO messages_tags(message_id,tag_id) VALUES (?,?)",
+ new BatchPreparedStatementSetter() {
+ @Override
+ public void setValues(@Nonnull PreparedStatement ps, int i) throws SQLException {
+ ps.setInt(1, mid);
+ ps.setInt(2, addedTags.get(i).TID);
+ }
+
+ @Override
+ public int getBatchSize() {
+ return addedTags.size();
+ }
+ });
return getMessageTags(mid).stream()
.map(TagStats::getTag).collect(Collectors.toSet());
@@ -257,7 +269,8 @@ public class TagServiceImpl extends BaseJdbcService implements TagService {
@Override
public boolean blacklistTag(User user, Tag tag) {
- int rowcount = getNamedParameterJdbcTemplate().update("DELETE FROM bl_tags WHERE tag_id = :tid AND user_id = :uid",
+ int rowcount = getNamedParameterJdbcTemplate().update(
+ "DELETE FROM bl_tags WHERE tag_id = :tid AND user_id = :uid",
new MapSqlParameterSource().addValue("tid", tag.TID).addValue("uid", user.getUid()));
return rowcount <= 0 && getNamedParameterJdbcTemplate()
.update("INSERT INTO bl_tags(user_id, tag_id) VALUES(:uid,:tid)",