11package 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 ;
311import lombok .AllArgsConstructor ;
412import org .springframework .data .domain .PageImpl ;
513import org .springframework .data .domain .Pageable ;
2028import wooteco .prolog .studylog .domain .repository .PopularStudylogRepository ;
2129import 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 )
3534public 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