diff --git a/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/repository/HashtagRepository.java b/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/repository/HashtagRepository.java index 1f5358f..8d5a739 100644 --- a/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/repository/HashtagRepository.java +++ b/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/repository/HashtagRepository.java @@ -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 { - List findByHashtagContainingOrderByCountDesc(String keyword, Pageable pageable); + Optional findByHashtagEquals(String hashtag); + + List findAllByHashtagContaining(String hashtag); List findByHashtagIn(List hashtagList); } diff --git a/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/service/HashtagServiceImpl.java b/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/service/HashtagServiceImpl.java index 9868ac6..d65c1f3 100644 --- a/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/service/HashtagServiceImpl.java +++ b/src/main/java/org/com/itpple/spot/server/domain/pot/domain/hashtag/service/HashtagServiceImpl.java @@ -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; @@ -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 @@ -27,12 +27,25 @@ public class HashtagServiceImpl implements HashtagService { @Override @Transactional(readOnly = true) public List 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 getHashtag(String keyword) { + return hashtagRepository.findByHashtagEquals(keyword) + .map(HashtagDTO::from); } @Override diff --git a/src/main/java/org/com/itpple/spot/server/domain/pot/dto/HashtagDTO.java b/src/main/java/org/com/itpple/spot/server/domain/pot/dto/HashtagDTO.java index bb4012a..ef1fc0c 100644 --- a/src/main/java/org/com/itpple/spot/server/domain/pot/dto/HashtagDTO.java +++ b/src/main/java/org/com/itpple/spot/server/domain/pot/dto/HashtagDTO.java @@ -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(); } }