Skip to content

Commit 2987202

Browse files
authored
Merge pull request #174 from dnd-side-project/refactor/first-sprint
fix(RecommendationService): 추천 플레이리스트 중복 방지
2 parents 4138dae + 4ded833 commit 2987202

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

main-server/src/main/java/com/example/demo/domain/recommendation/service/RecommendationServiceImpl.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.time.LocalDate;
1717
import java.util.*;
1818
import java.util.stream.Collectors;
19+
import java.util.stream.Stream;
1920

2021
@Slf4j
2122
@Service
@@ -31,23 +32,30 @@ public class RecommendationServiceImpl implements RecommendationService {
3132

3233
@Override
3334
public List<PlaylistCardResponse> getRecommendations(String userId) {
34-
List<Playlist> basePlaylists;
3535
List<Playlist> genreBased = userPlaylistHistoryRepository.findByUserRecentGenre(userId, 3);
36+
List<Playlist> visitCountTop6 = playlistRepository.findByVisitCount(6);
3637

37-
if (genreBased.isEmpty()) {
38-
basePlaylists = playlistRepository.findByVisitCount(6);
39-
} else {
40-
List<Playlist> visitCountTop3 = playlistRepository.findByVisitCount(3);
41-
basePlaylists = new ArrayList<>(genreBased);
42-
basePlaylists.addAll(visitCountTop3);
43-
}
38+
Set<Long> genreIds = genreBased.stream()
39+
.map(Playlist::getId)
40+
.collect(Collectors.toCollection(LinkedHashSet::new));
41+
42+
List<Playlist> basePlaylists = Stream.concat(
43+
genreBased.stream(),
44+
visitCountTop6.stream().filter(p -> !genreIds.contains(p.getId()))
45+
).limit(6).toList();
4446

4547
List<Long> playlistIds = basePlaylists.stream().map(Playlist::getId).toList();
48+
4649
Map<Long, List<Song>> songMap = songRepository.findAllByPlaylistIdIn(playlistIds)
47-
.stream().collect(Collectors.groupingBy(s -> s.getPlaylist().getId()));
50+
.stream()
51+
.collect(Collectors.groupingBy(s -> s.getPlaylist().getId()));
4852

4953
return basePlaylists.stream()
50-
.map(p -> PlaylistCardResponse.from(p, songMap.getOrDefault(p.getId(), List.of()), cdService.getOnlyCdByPlaylistId(p.getId())))
54+
.map(p -> PlaylistCardResponse.from(
55+
p,
56+
songMap.getOrDefault(p.getId(), List.of()),
57+
cdService.getOnlyCdByPlaylistId(p.getId())
58+
))
5159
.toList();
5260
}
5361

0 commit comments

Comments
 (0)