From d95c751eca3e1bf24142ac66568b5ad8b8e531f3 Mon Sep 17 00:00:00 2001 From: youth Date: Fri, 13 Sep 2024 11:41:02 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B6=80=EC=9B=90=20=EC=B6=9C=EA=B2=B0?= =?UTF-8?q?=20=EA=B8=B0=EB=A1=9D=20=EB=B0=98=ED=99=98=20=EC=8B=9C=20?= =?UTF-8?q?=EC=B6=9C=EA=B2=B0=20=EA=B8=B0=EB=A1=9D=EC=9D=98=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=20=EC=97=AC=EB=B6=80=EB=A5=BC=20=EA=B8=B0=EC=A4=80?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attendance/dto/MemberAttendResponse.java | 23 ++++++++------- .../service/AttendanceRecordService.java | 29 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/api/attendance/dto/MemberAttendResponse.java b/src/main/java/org/cotato/csquiz/api/attendance/dto/MemberAttendResponse.java index c1fb67cc..0c6675b0 100644 --- a/src/main/java/org/cotato/csquiz/api/attendance/dto/MemberAttendResponse.java +++ b/src/main/java/org/cotato/csquiz/api/attendance/dto/MemberAttendResponse.java @@ -30,29 +30,30 @@ public record MemberAttendResponse( @Schema(description = "마감된 출석에 대한 출결 결과", nullable = true) AttendanceResult attendanceResult ) { - public static MemberAttendResponse closedAttendanceResponse(Session session, AttendanceRecord attendanceRecord) { + public static MemberAttendResponse unrecordedAttendance(Session session, Attendance attendance, Long memberId) { return new MemberAttendResponse( session.getId(), - attendanceRecord.getAttendance().getId(), - attendanceRecord.getMemberId(), + attendance.getId(), + memberId, session.getTitle(), session.getSessionDateTime(), - AttendanceOpenStatus.CLOSED, - attendanceRecord.getAttendanceType(), - attendanceRecord.getAttendanceResult() + AttendanceUtil.getAttendanceOpenStatus(session.getSessionDateTime(), attendance, LocalDateTime.now()), + null, + null ); } - public static MemberAttendResponse openedAttendanceResponse(Attendance attendance, Session session, Long memberId) { + public static MemberAttendResponse recordedAttendance(Session session, Attendance attendance, + AttendanceRecord attendanceRecord) { return new MemberAttendResponse( session.getId(), - attendance.getId(), - memberId, + attendanceRecord.getAttendanceId(), + attendanceRecord.getMemberId(), session.getTitle(), session.getSessionDateTime(), AttendanceUtil.getAttendanceOpenStatus(session.getSessionDateTime(), attendance, LocalDateTime.now()), - null, - null + attendanceRecord.getAttendanceType(), + attendanceRecord.getAttendanceResult() ); } } diff --git a/src/main/java/org/cotato/csquiz/domain/attendance/service/AttendanceRecordService.java b/src/main/java/org/cotato/csquiz/domain/attendance/service/AttendanceRecordService.java index 5b1c86ed..6840944e 100644 --- a/src/main/java/org/cotato/csquiz/domain/attendance/service/AttendanceRecordService.java +++ b/src/main/java/org/cotato/csquiz/domain/attendance/service/AttendanceRecordService.java @@ -96,28 +96,27 @@ public MemberAttendanceRecordsResponse findAllRecordsBy(final Long generationId, List sessionIds = sessions.stream() .map(Session::getId) .toList(); - // 세션에 해당하는 모든 출결을 찾아 - LocalDateTime currentTime = LocalDateTime.now(); - Map> isClosedAttendance = attendanceRepository.findAllBySessionIdsInQuery(sessionIds) - .stream() - .collect(Collectors.partitioningBy(attendance -> - getAttendanceOpenStatus(sessionMap.get(attendance.getSessionId()).getSessionDateTime(), - attendance, currentTime) == AttendanceOpenStatus.CLOSED)); + List attendances = attendanceRepository.findAllBySessionIdsInQuery(sessionIds); - List closedAttendanceIds = isClosedAttendance.get(true).stream() + List attendanceIds = attendances.stream() .map(Attendance::getId) .toList(); - List responses = attendanceRecordRepository.findAllByAttendanceIdsInQueryAndMemberId( - closedAttendanceIds, memberId).stream() - .map(ar -> MemberAttendResponse.closedAttendanceResponse( - sessionMap.get(ar.getAttendance().getSessionId()), ar)) + Map attendanceRecordMap = attendanceRecordRepository.findAllByAttendanceIdsInQueryAndMemberId( + attendanceIds, memberId).stream() + .collect(Collectors.toUnmodifiableMap(AttendanceRecord::getAttendanceId, Function.identity())); + + Map> recordedAttendance = attendances.stream() + .collect(Collectors.partitioningBy(at -> attendanceRecordMap.containsKey(at.getId()))); + + List responses = recordedAttendance.get(true).stream() + .map(at -> MemberAttendResponse.recordedAttendance(sessionMap.get(at.getSessionId()), at, + attendanceRecordMap.get(at.getId()))) .collect(Collectors.toList()); - responses.addAll(isClosedAttendance.get(false).stream() - .map(attendance -> MemberAttendResponse.openedAttendanceResponse(attendance, - sessionMap.get(attendance.getSessionId()), memberId)) + responses.addAll(recordedAttendance.get(false).stream() + .map(at -> MemberAttendResponse.unrecordedAttendance(sessionMap.get(at.getSessionId()), at, memberId)) .toList()); return MemberAttendanceRecordsResponse.of(generationId, responses);