Skip to content

Commit

Permalink
[fix] 해시태그가 정확히 일치하면 count 상관없이 노출
Browse files Browse the repository at this point in the history
  • Loading branch information
junchanpp committed Feb 27, 2024
1 parent 1a2c314 commit 3054d01
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package org.com.itpple.spot.server.domain.pot.domain.hashtag.repository;

import java.util.List;
import java.util.Optional;
import org.com.itpple.spot.server.domain.pot.domain.hashtag.entity.Hashtag;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface HashtagRepository extends JpaRepository<Hashtag, Long> {
List<Hashtag> findByHashtagContainingOrderByCountDesc(String keyword, Pageable pageable);
Optional<Hashtag> findByHashtagEquals(String hashtag);

List<Hashtag> findAllByHashtagContaining(String hashtag);

List<Hashtag> findByHashtagIn(List<String> hashtagList);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.com.itpple.spot.server.domain.pot.domain.hashtag.service;

import io.jsonwebtoken.lang.Collections;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.com.itpple.spot.server.domain.pot.domain.hashtag.entity.Hashtag;
Expand All @@ -9,12 +12,9 @@
import org.com.itpple.spot.server.domain.pot.dto.request.CreateHashtagRequest;
import org.com.itpple.spot.server.global.exception.BusinessException;
import org.com.itpple.spot.server.global.exception.code.ErrorCode;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Slf4j
@Service
@RequiredArgsConstructor
Expand All @@ -27,12 +27,25 @@ public class HashtagServiceImpl implements HashtagService {
@Override
@Transactional(readOnly = true)
public List<HashtagDTO> getHashtag(String keyword, int page) {
var pageable = PageRequest.of(page, HASHTAG_PAGE_SIZE);
return hashtagRepository.findByHashtagContainingOrderByCountDesc(keyword, pageable)
.stream().filter(hashtag -> hashtag.getCount()
> 1) // 페이징 시 count 기준으로 정렬되어 있어서 1보다 작은 경우는 필터링해도 문제 없음

var hashtagList = hashtagRepository.findAllByHashtagContaining(keyword)
.stream().filter(hashtag -> hashtag.getCount() > 1) // 페이징 시 count 기준으로 정렬되어 있어서 1보다 작은 경우는 필터링해도 문제 없음
.sorted((o1, o2) -> Math.toIntExact(o2.getCount() - o1.getCount()))
.map(HashtagDTO::from).toList();


if (hashtagList.isEmpty()) {
hashtagList = this.getHashtag(keyword)
.map(List::of)
.orElseGet(ArrayList::new);
}

return hashtagList;
}

private Optional<HashtagDTO> getHashtag(String keyword) {
return hashtagRepository.findByHashtagEquals(keyword)
.map(HashtagDTO::from);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
public class HashtagDTO {
Long hashtagId;
String hashtag;
Long count;

public static HashtagDTO from(Hashtag hashtag) {
return HashtagDTO.builder()
.hashtagId(hashtag.getId())
.hashtag(hashtag.getHashtag())
.count(hashtag.getCount())
.build();
}
}

0 comments on commit 3054d01

Please sign in to comment.