Skip to content

Commit a3ac396

Browse files
authored
Merge pull request #1415 from woowacourse/fix/1412-filter-popular-studylogs
Fix/#1412 인기 학습로그 필터링 기능 복구
2 parents 0488681 + aac1bc4 commit a3ac396

File tree

2 files changed

+197
-124
lines changed

2 files changed

+197
-124
lines changed

backend/src/main/java/wooteco/prolog/studylog/application/PopularStudylogService.java

Lines changed: 49 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
package wooteco.prolog.studylog.application;
22

3+
import static java.util.stream.Collectors.toList;
4+
5+
import java.time.LocalDateTime;
6+
import java.util.ArrayList;
7+
import java.util.Comparator;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.stream.Collectors;
311
import lombok.AllArgsConstructor;
412
import org.springframework.data.domain.PageImpl;
513
import org.springframework.data.domain.Pageable;
@@ -20,25 +28,13 @@
2028
import wooteco.prolog.studylog.domain.repository.PopularStudylogRepository;
2129
import wooteco.prolog.studylog.domain.repository.StudylogRepository;
2230

23-
import java.time.LocalDateTime;
24-
import java.util.ArrayList;
25-
import java.util.Comparator;
26-
import java.util.List;
27-
import java.util.Map;
28-
import java.util.stream.Collectors;
29-
30-
import static java.util.stream.Collectors.toList;
31-
3231
@Service
3332
@AllArgsConstructor
3433
@Transactional(readOnly = true)
3534
public class PopularStudylogService {
3635

3736
private static final int A_WEEK = 7;
3837
private static final int THREE_WEEK = 21;
39-
private static final String BACKEND = "백엔드";
40-
private static final String FRONTEND = "프론트엔드";
41-
private static final String ANDROID = "안드로이드";
4238

4339
private final StudylogService studylogService;
4440
private final StudylogRepository studylogRepository;
@@ -51,24 +47,23 @@ public void updatePopularStudylogs(Pageable pageable) {
5147
deleteAllLegacyPopularStudylogs();
5248

5349
List<GroupMember> groupMembers = groupMemberRepository.findAll();
54-
Map<MemberGroupType, List<MemberGroup>> memberGroupsBygroupType = memberGroupRepository.findAll().stream()
55-
.collect(Collectors.groupingBy(MemberGroup::getGroupType));
50+
Map<MemberGroupType, List<MemberGroup>> memberGroupsBygroupType = memberGroupRepository.findAll()
51+
.stream().collect(Collectors.groupingBy(MemberGroup::getGroupType));
5652

57-
final List<Studylog> recentStudylogs = findRecentStudylogs(LocalDateTime.now(), pageable.getPageSize());
53+
final List<Studylog> recentStudylogs = findRecentStudylogs(LocalDateTime.now(),
54+
pageable.getPageSize());
5855

5956
List<Studylog> popularStudylogs = new ArrayList<>();
6057

6158
for (MemberGroupType groupType : MemberGroupType.values()) {
62-
popularStudylogs.addAll(filterStudylogsByMemberGroups(recentStudylogs, new MemberGroups(memberGroupsBygroupType.get(groupType)), groupMembers)
63-
.stream()
59+
popularStudylogs.addAll(filterStudylogsByMemberGroups(recentStudylogs,
60+
new MemberGroups(memberGroupsBygroupType.get(groupType)), groupMembers).stream()
6461
.sorted(Comparator.comparing(Studylog::getPopularScore).reversed())
65-
.limit(pageable.getPageSize())
66-
.collect(toList()));
62+
.limit(pageable.getPageSize()).collect(toList()));
6763
}
6864

69-
popularStudylogRepository.saveAll(popularStudylogs.stream()
70-
.map(it -> new PopularStudylog(it.getId()))
71-
.collect(toList()));
65+
popularStudylogRepository.saveAll(
66+
popularStudylogs.stream().map(it -> new PopularStudylog(it.getId())).collect(toList()));
7267
}
7368

7469
private void deleteAllLegacyPopularStudylogs() {
@@ -79,7 +74,8 @@ private void deleteAllLegacyPopularStudylogs() {
7974
}
8075
}
8176

82-
private List<Studylog> findRecentStudylogs(final LocalDateTime dateTime, final int minStudylogsSize) {
77+
private List<Studylog> findRecentStudylogs(final LocalDateTime dateTime,
78+
final int minStudylogsSize) {
8379
int decreaseDays = A_WEEK;
8480
List<Studylog> recentStudylogs = new ArrayList<>();
8581
while (decreaseDays <= THREE_WEEK) {
@@ -92,61 +88,56 @@ private List<Studylog> findRecentStudylogs(final LocalDateTime dateTime, final i
9288
return recentStudylogs;
9389
}
9490

95-
private List<Studylog> filterStudylogsByMemberGroups(final List<Studylog> studylogs, final MemberGroups memberGroups, final List<GroupMember> groupMembers) {
96-
return studylogs.stream()
97-
.filter(studylog -> checkMemberAssignedInMemberGroups(memberGroups, studylog.getMember(),
98-
groupMembers))
99-
.collect(toList());
91+
private List<Studylog> filterStudylogsByMemberGroups(final List<Studylog> studylogs,
92+
final MemberGroups memberGroups,
93+
final List<GroupMember> groupMembers) {
94+
return studylogs.stream().filter(
95+
studylog -> checkMemberAssignedInMemberGroups(memberGroups, studylog.getMember(),
96+
groupMembers)).collect(toList());
10097
}
10198

102-
private boolean checkMemberAssignedInMemberGroups(MemberGroups memberGroups,
103-
Member member,
99+
private boolean checkMemberAssignedInMemberGroups(MemberGroups memberGroups, Member member,
104100
List<GroupMember> groupMembers) {
105-
if (canJudgeMemberGroup(groupMembers, member)) {
106-
return groupMembers.stream()
107-
.anyMatch(memberGroups::isContainsMemberGroups);
108-
}
109-
110-
return false;
111-
}
112-
113-
private boolean canJudgeMemberGroup(final List<GroupMember> groupMembers, final Member member) {
114-
return groupMembers.stream()
115-
.anyMatch(it -> it.getMember().equals(member));
101+
return groupMembers.stream().anyMatch(
102+
it -> it.getMember().equals(member) && memberGroups.isContainsMemberGroups(it));
116103
}
117104

118-
public PopularStudylogsResponse findPopularStudylogs(Pageable pageable,
119-
Long memberId,
105+
public PopularStudylogsResponse findPopularStudylogs(Pageable pageable, Long memberId,
120106
boolean isAnonymousMember) {
121107

122108
List<Studylog> allPopularStudylogs = getSortedPopularStudyLogs(pageable);
123109
List<GroupMember> groupedMembers = groupMemberRepository.findAll();
124-
Map<MemberGroupType, List<MemberGroup>> memberGroupsBygroupType = memberGroupRepository.findAll().stream()
125-
.collect(Collectors.groupingBy(MemberGroup::getGroupType));
110+
Map<MemberGroupType, List<MemberGroup>> memberGroupsBygroupType = memberGroupRepository.findAll()
111+
.stream().collect(Collectors.groupingBy(MemberGroup::getGroupType));
126112

127113
return PopularStudylogsResponse.of(
128114
studylogsResponse(allPopularStudylogs, pageable, memberId),
129-
studylogsResponse(filterStudylogsByMemberGroups(allPopularStudylogs, new MemberGroups(memberGroupsBygroupType.get(MemberGroupType.FRONTEND)), groupedMembers), pageable, memberId),
130-
studylogsResponse(filterStudylogsByMemberGroups(allPopularStudylogs, new MemberGroups(memberGroupsBygroupType.get(MemberGroupType.BACKEND)), groupedMembers), pageable, memberId),
131-
studylogsResponse(filterStudylogsByMemberGroups(allPopularStudylogs, new MemberGroups(memberGroupsBygroupType.get(MemberGroupType.ANDROID)), groupedMembers), pageable, memberId)
132-
);
115+
studylogsResponse(
116+
filterStudylogsByMemberGroups(allPopularStudylogs, new MemberGroups(memberGroupsBygroupType.get(MemberGroupType.FRONTEND)), groupedMembers),
117+
pageable,
118+
memberId),
119+
studylogsResponse(
120+
filterStudylogsByMemberGroups(allPopularStudylogs, new MemberGroups(memberGroupsBygroupType.get(MemberGroupType.BACKEND)), groupedMembers),
121+
pageable,
122+
memberId),
123+
studylogsResponse(
124+
filterStudylogsByMemberGroups(allPopularStudylogs, new MemberGroups(memberGroupsBygroupType.get(MemberGroupType.ANDROID)), groupedMembers),
125+
pageable,
126+
memberId));
133127
}
134128

135129
private List<Studylog> getSortedPopularStudyLogs(Pageable pageable) {
136-
return studylogRepository.findAllByIdIn(getPopularStudylogIds(), pageable)
137-
.stream()
138-
.sorted(Comparator.comparing(Studylog::getPopularScore).reversed())
139-
.collect(toList());
130+
return studylogRepository.findAllByIdIn(getPopularStudylogIds(), pageable).stream()
131+
.sorted(Comparator.comparing(Studylog::getPopularScore).reversed()).collect(toList());
140132
}
141133

142134
private List<Long> getPopularStudylogIds() {
143-
return popularStudylogRepository.findAllByDeletedFalse()
144-
.stream()
145-
.map(PopularStudylog::getStudylogId)
146-
.collect(toList());
135+
return popularStudylogRepository.findAllByDeletedFalse().stream()
136+
.map(PopularStudylog::getStudylogId).collect(toList());
147137
}
148138

149-
private StudylogsResponse studylogsResponse(final List<Studylog> studylogs, final Pageable pageable, final Long memberId) {
139+
private StudylogsResponse studylogsResponse(final List<Studylog> studylogs,
140+
final Pageable pageable, final Long memberId) {
150141
final PageImpl<Studylog> page = new PageImpl<>(studylogs, pageable, studylogs.size());
151142
if (memberId == null) {
152143
return StudylogsResponse.of(page);

0 commit comments

Comments
 (0)