44import com .movelog .domain .record .domain .Record ;
55import com .movelog .domain .record .domain .repository .RecordRepository ;
66import com .movelog .domain .record .dto .response .MyKeywordStatsRes ;
7+ import com .movelog .domain .record .dto .response .RecommendKeywordInStatsRes ;
78import com .movelog .domain .record .dto .response .SearchKeywordInStatsRes ;
89import com .movelog .domain .record .exception .KeywordNotFoundException ;
910import com .movelog .domain .record .domain .repository .KeywordRepository ;
1415import com .movelog .global .config .security .token .UserPrincipal ;
1516import lombok .RequiredArgsConstructor ;
1617import lombok .extern .slf4j .Slf4j ;
18+ import org .springframework .data .jpa .repository .Query ;
1719import org .springframework .stereotype .Service ;
1820import org .springframework .transaction .annotation .Transactional ;
1921
@@ -34,10 +36,11 @@ public class KeywordService {
3436
3537 public List <SearchKeywordInStatsRes > searchKeywordInStats (UserPrincipal userPrincipal , String keyword ) {
3638
37- User user = validUserById (userPrincipal );
39+ validUserById (userPrincipal );
3840
3941 // 검색어를 포함한 키워드 리스트 조회
40- List <Keyword > keywords = keywordRepository .findAllByUserAndKeywordContaining (user , keyword );
42+ List <Keyword > keywords = keywordRepository .findAllKeywordStartingWith (keyword );
43+ log .info ("Searching for keywords starting with: {}" , keyword );
4144
4245 // 기록이 많은 순서대로 정렬
4346 keywords = sortKeywordByRecordCount (keywords );
@@ -54,6 +57,10 @@ public List<SearchKeywordInStatsRes> searchKeywordInStats(UserPrincipal userPrin
5457 public MyKeywordStatsRes getMyKeywordStatsRes (UserPrincipal userPrincipal , Long keywordId ) {
5558 validUserById (userPrincipal );
5659 Keyword keyword = validKeywordById (keywordId );
60+ // 사용자가 기록한 키워드가 아닐 시, 빈 배열 반환
61+ if (!keyword .getUser ().getId ().equals (userPrincipal .getId ())) {
62+ return MyKeywordStatsRes .builder ().build ();
63+ }
5764
5865 return MyKeywordStatsRes .builder ()
5966 .noun (keyword .getKeyword ())
@@ -122,6 +129,18 @@ private double roundToTwoDecimal(double value) {
122129 return Math .round (value * 100 ) / 100.0 ;
123130 }
124131
132+ public List <RecommendKeywordInStatsRes > getRecommendKeywords (UserPrincipal userPrincipal ) {
133+ User user = validUserById (userPrincipal );
134+ List <Keyword > keywords = keywordRepository .findTop5ByUserOrderByCreatedAtDesc (user );
135+
136+ return keywords .stream ()
137+ .map (keyword -> RecommendKeywordInStatsRes .builder ()
138+ .keywordId (keyword .getKeywordId ())
139+ .noun (keyword .getKeyword ())
140+ .build ())
141+ .toList ();
142+ }
143+
125144 private User validUserById (UserPrincipal userPrincipal ) {
126145 Optional <User > userOptional = userService .findById (userPrincipal .getId ());
127146 // Optional<User> userOptional = userRepository.findById(5L);
@@ -135,4 +154,5 @@ private Keyword validKeywordById(Long keywordId) {
135154 return keywordOptional .get ();
136155 }
137156
157+
138158}
0 commit comments