diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/model/AttendModel.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/model/AttendModel.java index ac07e79b..f06cbbea 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/model/AttendModel.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/model/AttendModel.java @@ -9,6 +9,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.ToString; @Getter @@ -22,9 +23,8 @@ public class AttendModel implements AbstractModel, MemberIdModel { private Long programId; private AttendStatus status; - private Long rank; - - private Integer penaltyScore; + @Setter private Long rank; + @Setter private Integer penaltyScore; public AttendModel changeStatus(String afterStatus) { validateChange(afterStatus); @@ -76,8 +76,4 @@ private void isSameBeforeStatus(String status) { } throw new NotSameBeforeAttendStatusException(memberId); } - - public void setRank(Long rank) { - this.rank = rank; - } } diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java index 933d5c22..68ea9437 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java @@ -86,6 +86,7 @@ public class AttendService private final ProgramRepository programRepository; private final ProgramEntityConverter programEntityConverter; private final AttendCountCalculate attendCountCalculate; + private final AttendWeightCalculator attendWeightCalculator; private final AttendPenaltyResponseConverter attendPenaltyResponseConverter; private final ProgramRankCounterRepository programRankCounterRepository; private final SemesterPeriodProvider semesterPeriodProvider; @@ -145,13 +146,7 @@ public ChangeAttendStatusResponse changeStatus(final Long memberId, final Long p validateAttend(program, model); - AttendModel changedModel = model.changeStatus(program.getAttendMode().getMode()); - - if (changedModel.getStatus().equals("attend")) { - Long rank = getNextRank(programId); - changedModel.setRank(rank); - } - + AttendModel changedModel = updateAttendStatus(model, program); AttendEntity updated = attendRepository.save(attendEntityConverter.toEntity(changedModel)); String name = queryMemberService.getName(memberId); @@ -403,6 +398,26 @@ public PageResponse getStatistics( return new PageResponse<>(Page.empty(PageRequest.of(page - 1, size))); } + private AttendModel updateAttendStatus(AttendModel model, ProgramModel program) { + // 현재 출석 모드 가져오기 + ProgramAttendMode attendMode = program.getAttendMode(); + AttendStatus attendStatus = AttendStatus.find(attendMode.getMode()); + + // 상태 바꾸기 + AttendModel changedModel = model.changeStatus(attendMode.getMode()); + // 벌점 반영하기 + if (attendStatus == AttendStatus.ABSENT || attendStatus == AttendStatus.LATE) + changedModel.setPenaltyScore( + attendWeightCalculator.calculateTotalScore(List.of(attendStatus))); + + if (attendStatus == AttendStatus.ATTEND) { + Long rank = getNextRank(program.getId()); + changedModel.setRank(rank); + } + + return changedModel; + } + private List findMyAttends(List programs) { Long memberId = RequestScope.getMemberId(); return attendRepository