Skip to content

Commit

Permalink
[refactor] 학습리포트 상세조회 시 standard 따른 score ,average 수정
Browse files Browse the repository at this point in the history
[refactor] 학습리포트 상세조회 시 standard 따른 score ,average 수정
  • Loading branch information
bangyewon authored Jan 16, 2025
2 parents a3155ef + 57c1b86 commit 0f60867
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class Invitation extends BaseEntity {
@Column(nullable = false, length = 20)
private String name;

@Column(nullable = false, length = 20)
@Column(nullable = false)
private String email;

@Enumerated(EnumType.STRING)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import classfit.example.classfit.student.dto.StudentList;
import classfit.example.classfit.studentExam.domain.Exam;
import classfit.example.classfit.studentExam.domain.ExamRepository;
import classfit.example.classfit.studentExam.domain.Standard;
import classfit.example.classfit.studentExam.domain.StudentExamScore;
import classfit.example.classfit.studentExam.domain.StudentExamScoreRepository;
import classfit.example.classfit.studentExam.dto.process.ExamHistory;
Expand Down Expand Up @@ -118,9 +119,10 @@ public CreateReportResponse createReport(@AuthMember Member member,


@Transactional(readOnly = true)
public List<ReportExam> showReportExam(@AuthMember Member member, LocalDate startDate, LocalDate endDate, Long mainClassId,
public List<ReportExam> showReportExam(@AuthMember Member member, LocalDate startDate,
LocalDate endDate, Long mainClassId,
Long subClassId) {
validateAcademy(member,member.getAcademy().getId());
validateAcademy(member, member.getAcademy().getId());
List<ReportExam> reports = scoreReportRepository.findExamsByCreatedAtBetween(startDate,
endDate, mainClassId, subClassId);
return reports.stream()
Expand All @@ -145,7 +147,7 @@ public List<FindReportResponse> findReport(@AuthMember Member member, Long mainC
SubClass subClass = subClassRepository.findById(subClassId)
.orElseThrow(
() -> new ClassfitException("서브 클래스를 찾을 수 없어요.", HttpStatus.NOT_FOUND));
validateAcademy(member,mainClass.getAcademy().getId());
validateAcademy(member, mainClass.getAcademy().getId());
List<ScoreReport> studentReports = scoreReportRepository.findAllReportsByMainClassAndSubClass(
mainClassId, subClassId);

Expand Down Expand Up @@ -186,7 +188,7 @@ public List<FindAllReportResponse> findAllReport(@AuthMember Member member) {

@Transactional
public void deleteReport(@AuthMember Member member, Long studentReportId) {
validateAcademy(member,member.getAcademy().getId());
validateAcademy(member, member.getAcademy().getId());
scoreReportRepository.deleteById(studentReportId);
}

Expand Down Expand Up @@ -238,10 +240,10 @@ public List<SentStudentOpinionResponse> sentStudentOpinion(@AuthMember Member me
@Transactional(readOnly = true)
public ShowStudentReportResponse showStudentReport(@AuthMember Member member, Long reportId) {
ScoreReport scoreReport = scoreReportRepository.findById(reportId)
.orElseThrow(
() -> new ClassfitException("학습리포트를 찾을 수 없어요.", HttpStatus.NOT_FOUND));
.orElseThrow(() -> new ClassfitException("학습리포트를 찾을 수 없어요.", HttpStatus.NOT_FOUND));

validateAcademy(member, scoreReport.getMainClass().getAcademy().getId());

List<AttendanceInfo> attendanceInfoList = scoreReport.getStudent().getAttendances().stream()
.collect(Collectors.groupingBy(
Attendance::getStatus,
Expand All @@ -254,9 +256,11 @@ public ShowStudentReportResponse showStudentReport(@AuthMember Member member, Lo
entry.getValue()
))
.toList();

Integer totalAttendanceCount = attendanceInfoList.stream()
.mapToInt(AttendanceInfo::attendanceCount)
.sum();

List<StudentExamScore> studentExamScores = studentExamScoreRepository.findByScoreReport(
scoreReport);

Expand All @@ -265,6 +269,41 @@ public ShowStudentReportResponse showStudentReport(@AuthMember Member member, Lo
.equals(scoreReport.getId()))
.map(studentExamScore -> {
Exam exam = studentExamScore.getExam();

if (exam.getStandard() == Standard.PF) {
long pCount = studentExamScoreRepository.countByExamAndScore(exam, -3);
long fCount = studentExamScoreRepository.countByExamAndScore(exam, -4);

exam.updateAverage(pCount > fCount ? 100 : 0);

// PF 일때
return new ExamHistory(
exam.getId(),
exam.getExamName(),
exam.getStandard(),
exam.getAverage(),
studentExamScore.getScore()
);
}
if (exam.getStandard() == Standard.QUESTION) {

double maxScore = exam.getHighestScore();

double convertedScore =
(double) studentExamScore.getScore() / maxScore * 100.0;

double convertedAverage = (double) exam.getAverage() / maxScore * 100.0;

return new ExamHistory(
exam.getId(),
exam.getExamName(),
exam.getStandard(),
Math.round(convertedAverage),
(int) Math.round(convertedScore)
);
}

// score 일때
return new ExamHistory(
exam.getId(),
exam.getExamName(),
Expand All @@ -273,7 +312,7 @@ public ShowStudentReportResponse showStudentReport(@AuthMember Member member, Lo
studentExamScore.getScore()
);
})
.collect(Collectors.toList());
.toList();

return new ShowStudentReportResponse(
scoreReport.getStudent().getId(),
Expand All @@ -290,9 +329,9 @@ public ShowStudentReportResponse showStudentReport(@AuthMember Member member, Lo
scoreReport.getOverallOpinion(),
scoreReport.getStudentOpinion()
);

}


private void validateAcademy(Member member, Long academyId) {
Academy academy = academyRepository.findById(academyId)
.orElseThrow(() -> new ClassfitException("학원을 찾을 수 없어요.", HttpStatus.NOT_FOUND));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,14 @@ public void updateScores(Integer lowestScore, Integer perfectScore, Long average
this.perfectScore = perfectScore;
this.average = average;
}

public void updateHighestScore(Integer highestScore) {
this.highestScore = highestScore;
}

public void updateAverage(Integer newAverage) {
this.average = newAverage.longValue();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ public interface StudentExamScoreRepository extends JpaRepository<StudentExamSco

List<StudentExamScore> findByScoreReport(ScoreReport scoreReport);

long countByExamAndScore(Exam exam, int score);

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,6 @@ public class ExamService {
private final StudentExamScoreRepository studentExamScoreRepository;
private final AcademyRepository academyRepository;

// academy에서 적절한 member찾는 메소드
private boolean isMemberInAcademy(Member member, Academy academy) {
return academy.getMembers().stream()
.anyMatch(academyMember -> academyMember.getId().equals(member.getId()));
}

private void validateAcademy(Member member, Long academyId) {
Academy academy = academyRepository.findById(academyId)
Expand Down

0 comments on commit 0f60867

Please sign in to comment.