|
4 | 4 | import gdsc.konkuk.platformcore.application.attendance.dtos.MemberAttendanceQueryDto;
|
5 | 5 | import gdsc.konkuk.platformcore.application.member.dtos.MemberAttendanceAggregate;
|
6 | 6 | import gdsc.konkuk.platformcore.application.member.dtos.MemberAttendanceInfos;
|
7 |
| - |
8 | 7 | import java.util.HashMap;
|
9 | 8 | import java.util.List;
|
10 | 9 | import java.util.Map;
|
11 | 10 |
|
12 | 11 | public class MemberAttendanceAggregator {
|
13 |
| - public static List<MemberAttendanceAggregate> process(final List<MemberAttendanceQueryDto> queryDtos) { |
14 |
| - Map<Long, MemberAttendanceAggregate> memberAttendanceAggregates = new HashMap<>(); |
15 |
| - Map<Long, MemberAttendanceInfos> memberAttendanceInfos = new HashMap<>(); |
16 |
| - aggregateMemberAttendances(memberAttendanceAggregates, memberAttendanceInfos, queryDtos); |
17 |
| - validateAggregation(memberAttendanceAggregates, memberAttendanceInfos); |
18 |
| - return mergeIntoList(memberAttendanceAggregates, memberAttendanceInfos); |
19 |
| - } |
20 | 12 |
|
21 |
| - /*** |
22 |
| - * 사용자별 출석 정보를 집계하는 함수로 사용자별 출석 통계 정보와 출석 상세 정보를 집계한다. |
23 |
| - * @param memberAttendanceAggregates 출석 통계 정보 |
24 |
| - * @param memberAttendanceInfos 출석 상세 정보 |
25 |
| - * @param queries 출석정보 쿼리 dto |
26 |
| - */ |
27 |
| - private static void aggregateMemberAttendances( |
28 |
| - final Map<Long, MemberAttendanceAggregate> memberAttendanceAggregates, |
29 |
| - final Map<Long, MemberAttendanceInfos> memberAttendanceInfos, |
30 |
| - final List<MemberAttendanceQueryDto> queries) { |
31 |
| - for (MemberAttendanceQueryDto queryDto : queries) { |
32 |
| - memberAttendanceAggregates.putIfAbsent(queryDto.getMemberId(), MemberAttendanceAggregate.from(queryDto)); |
33 |
| - addToMemberAttendanceRecords(memberAttendanceInfos, queryDto); |
| 13 | + public static List<MemberAttendanceAggregate> process( |
| 14 | + final List<MemberAttendanceQueryDto> queryDtos) { |
| 15 | + Map<Long, MemberAttendanceAggregate> memberAttendanceAggregates = new HashMap<>(); |
| 16 | + Map<Long, MemberAttendanceInfos> memberAttendanceInfos = new HashMap<>(); |
| 17 | + aggregateMemberAttendances(memberAttendanceAggregates, memberAttendanceInfos, queryDtos); |
| 18 | + validateAggregation(memberAttendanceAggregates, memberAttendanceInfos); |
| 19 | + return mergeIntoList(memberAttendanceAggregates, memberAttendanceInfos); |
| 20 | + } |
| 21 | + |
| 22 | + /** |
| 23 | + * 사용자별 출석 정보를 집계하는 함수로 사용자별 출석 통계 정보와 출석 상세 정보를 집계한다. |
| 24 | + * |
| 25 | + * @param memberAttendanceAggregates 출석 통계 정보 |
| 26 | + * @param memberAttendanceInfos 출석 상세 정보 |
| 27 | + * @param queries 출석정보 쿼리 dto |
| 28 | + */ |
| 29 | + private static void aggregateMemberAttendances( |
| 30 | + final Map<Long, MemberAttendanceAggregate> memberAttendanceAggregates, |
| 31 | + final Map<Long, MemberAttendanceInfos> memberAttendanceInfos, |
| 32 | + final List<MemberAttendanceQueryDto> queries) { |
| 33 | + for (MemberAttendanceQueryDto queryDto : queries) { |
| 34 | + memberAttendanceAggregates.putIfAbsent(queryDto.getMemberId(), |
| 35 | + MemberAttendanceAggregate.from(queryDto)); |
| 36 | + addToMemberAttendanceRecords(memberAttendanceInfos, queryDto); |
| 37 | + } |
34 | 38 | }
|
35 |
| - } |
36 | 39 |
|
37 |
| - // query 데이터를 읽고 사용자별 기록에 추가하는 함수 |
38 |
| - private static void addToMemberAttendanceRecords(final Map<Long, MemberAttendanceInfos> attendanceRecordsMap, |
39 |
| - final MemberAttendanceQueryDto queryDto) { |
40 |
| - MemberAttendanceInfos records = attendanceRecordsMap |
41 |
| - .computeIfAbsent(queryDto.getMemberId(), key -> new MemberAttendanceInfos()); |
42 |
| - records.addAttendanceInfo(MemberAttendanceInfo.from(queryDto)); |
43 |
| - } |
| 40 | + /** |
| 41 | + * query 데이터를 읽고 사용자별 기록에 추가하는 함수 |
| 42 | + */ |
| 43 | + private static void addToMemberAttendanceRecords( |
| 44 | + final Map<Long, MemberAttendanceInfos> attendanceRecordsMap, |
| 45 | + final MemberAttendanceQueryDto queryDto) { |
| 46 | + MemberAttendanceInfos records = attendanceRecordsMap |
| 47 | + .computeIfAbsent(queryDto.getMemberId(), key -> new MemberAttendanceInfos()); |
| 48 | + records.addAttendanceInfo(MemberAttendanceInfo.from(queryDto)); |
| 49 | + } |
44 | 50 |
|
45 |
| - private static void validateAggregation(final Map<Long, MemberAttendanceAggregate> memberAttendanceSummary, |
46 |
| - final Map<Long, MemberAttendanceInfos> memberAttendanceDetails) { |
47 |
| - if(memberAttendanceSummary.size() != memberAttendanceDetails.size()) { |
48 |
| - throw new IllegalStateException("Member attendance summary and details are not matched"); |
| 51 | + private static void validateAggregation( |
| 52 | + final Map<Long, MemberAttendanceAggregate> memberAttendanceSummary, |
| 53 | + final Map<Long, MemberAttendanceInfos> memberAttendanceDetails) { |
| 54 | + if (memberAttendanceSummary.size() != memberAttendanceDetails.size()) { |
| 55 | + throw new IllegalStateException( |
| 56 | + "Member attendance summary and details are not matched"); |
| 57 | + } |
49 | 58 | }
|
50 |
| - } |
51 | 59 |
|
52 |
| - /*** |
53 |
| - * 사용자별 출석 통계 정보에 출석 상세 정보들을 추가하고 리스트로 반환하는 함수 |
54 |
| - * @param memberAttendanceAggregates 출석 통계 정보 |
55 |
| - * @param memberAttendanceInfos 출석 상세 정보 |
56 |
| - * @return 사용자별 출석 통계 정보 리스트 |
57 |
| - */ |
58 |
| - private static List<MemberAttendanceAggregate> mergeIntoList(final Map<Long, MemberAttendanceAggregate> memberAttendanceAggregates, |
59 |
| - final Map<Long, MemberAttendanceInfos> memberAttendanceInfos) { |
60 |
| - for (Map.Entry<Long, MemberAttendanceInfos> memberAttendance : memberAttendanceInfos.entrySet()) { |
61 |
| - MemberAttendanceAggregate aggregate = memberAttendanceAggregates.get(memberAttendance.getKey()); |
62 |
| - aggregate.setAttendanceInfoList(memberAttendance.getValue().getAttendanceInfoList()); |
63 |
| - aggregate.setTotalAttendances(memberAttendance.getValue().getTotalAttendances()); |
64 |
| - aggregate.setActualAttendances(memberAttendance.getValue().getActualAttendances()); |
| 60 | + /** |
| 61 | + * 사용자별 출석 통계 정보에 출석 상세 정보들을 추가하고 리스트로 반환하는 함수 |
| 62 | + * |
| 63 | + * @param memberAttendanceAggregates 출석 통계 정보 |
| 64 | + * @param memberAttendanceInfos 출석 상세 정보 |
| 65 | + * @return 사용자별 출석 통계 정보 리스트 |
| 66 | + */ |
| 67 | + private static List<MemberAttendanceAggregate> mergeIntoList( |
| 68 | + final Map<Long, MemberAttendanceAggregate> memberAttendanceAggregates, |
| 69 | + final Map<Long, MemberAttendanceInfos> memberAttendanceInfos) { |
| 70 | + for (Map.Entry<Long, MemberAttendanceInfos> memberAttendance : memberAttendanceInfos.entrySet()) { |
| 71 | + MemberAttendanceAggregate aggregate = memberAttendanceAggregates.get( |
| 72 | + memberAttendance.getKey()); |
| 73 | + aggregate.setAttendanceInfoList(memberAttendance.getValue().getAttendanceInfoList()); |
| 74 | + aggregate.setTotalAttendances(memberAttendance.getValue().getTotalAttendances()); |
| 75 | + aggregate.setActualAttendances(memberAttendance.getValue().getActualAttendances()); |
| 76 | + } |
| 77 | + return memberAttendanceAggregates.values().stream().toList(); |
65 | 78 | }
|
66 |
| - return memberAttendanceAggregates.values().stream().toList(); |
67 |
| - } |
68 | 79 | }
|
0 commit comments