|
1 | 1 | package com.moplus.moplus_server.domain.DetailResultApplication.service;
|
2 | 2 |
|
3 | 3 | import com.moplus.moplus_server.domain.DetailResultApplication.dto.request.DetailResultApplicationPostRequest;
|
| 4 | +import com.moplus.moplus_server.domain.DetailResultApplication.dto.response.ProblemGetResponse; |
| 5 | +import com.moplus.moplus_server.domain.DetailResultApplication.dto.response.ReviewNoteGetResponse; |
4 | 6 | import com.moplus.moplus_server.domain.DetailResultApplication.respository.DetailResultApplicationRepository;
|
| 7 | +import com.moplus.moplus_server.domain.TestResult.dto.response.EstimatedRatingGetResponse; |
| 8 | +import com.moplus.moplus_server.domain.TestResult.entity.IncorrectProblem; |
| 9 | +import com.moplus.moplus_server.domain.TestResult.entity.TestResult; |
| 10 | +import com.moplus.moplus_server.domain.TestResult.repository.EstimatedRatingRepository; |
| 11 | +import com.moplus.moplus_server.domain.TestResult.repository.IncorrectProblemRepository; |
| 12 | +import com.moplus.moplus_server.domain.TestResult.repository.TestResultRepository; |
| 13 | +import com.moplus.moplus_server.domain.TestResult.service.IncorrectProblemService; |
| 14 | +import com.moplus.moplus_server.domain.practiceTest.domain.PracticeTest; |
| 15 | +import com.moplus.moplus_server.domain.practiceTest.domain.Problem; |
| 16 | +import com.moplus.moplus_server.domain.practiceTest.repository.PracticeTestRepository; |
| 17 | +import com.moplus.moplus_server.domain.practiceTest.repository.ProblemRepository; |
| 18 | +import com.moplus.moplus_server.global.error.exception.ErrorCode; |
| 19 | +import com.moplus.moplus_server.global.error.exception.NotFoundException; |
| 20 | +import java.time.Duration; |
| 21 | +import java.util.List; |
5 | 22 | import lombok.RequiredArgsConstructor;
|
6 | 23 | import org.springframework.stereotype.Service;
|
7 | 24 | import org.springframework.transaction.annotation.Transactional;
|
|
11 | 28 | public class DetailResultApplicationService {
|
12 | 29 |
|
13 | 30 | private final DetailResultApplicationRepository detailResultApplicationRepository;
|
| 31 | + private final TestResultRepository testResultRepository; |
| 32 | + private final PracticeTestRepository practiceTestRepository; |
| 33 | + private final EstimatedRatingRepository estimatedRatingRepository; |
| 34 | + private final IncorrectProblemService incorrectProblemService; |
| 35 | + private final IncorrectProblemRepository incorrectProblemRepository; |
| 36 | + private final ProblemRepository problemRepository; |
14 | 37 |
|
15 | 38 | @Transactional
|
16 | 39 | public void saveApplication(DetailResultApplicationPostRequest request) {
|
17 | 40 | detailResultApplicationRepository.save(request.toEntity());
|
18 | 41 | }
|
| 42 | + |
| 43 | + public ReviewNoteGetResponse getReviewNoteInfo(Long testResultId) { |
| 44 | + TestResult testResult = testResultRepository.findById(testResultId) |
| 45 | + .orElseThrow(() -> new NotFoundException(ErrorCode.TEST_RESULT_NOT_FOUND)); |
| 46 | + |
| 47 | + PracticeTest practiceTest = getPracticeTestById(testResult.getPracticeTestId()); |
| 48 | + Duration averageSolvingTime = practiceTest.getAverageSolvingTime(); |
| 49 | + |
| 50 | + List<EstimatedRatingGetResponse> estimatedRatingGetResponses = estimatedRatingRepository.findAllByTestResultId(testResultId).stream() |
| 51 | + .map(EstimatedRatingGetResponse::from) |
| 52 | + .toList(); |
| 53 | + |
| 54 | + int 대성마이맥_rating = estimatedRatingGetResponses.get(0).estimatedRating(); |
| 55 | + |
| 56 | + List<Problem> incorrectProblems = incorrectProblemRepository.findAllByTestResultId(testResultId).stream() |
| 57 | + .map(IncorrectProblem::getProblemId) |
| 58 | + .map(problemId -> problemRepository.findById(problemId).orElseThrow()) |
| 59 | + .toList(); |
| 60 | + |
| 61 | + List<ProblemGetResponse> forCurrentRating = incorrectProblems.stream() |
| 62 | + .filter(problem -> problem.getProblemRating().getRatingValue() == 대성마이맥_rating) |
| 63 | + .map(ProblemGetResponse::of) |
| 64 | + .toList(); |
| 65 | + |
| 66 | + List<ProblemGetResponse> forNextRating = incorrectProblems.stream() |
| 67 | + .filter(problem -> problem.getProblemRating().getRatingValue() == 대성마이맥_rating - 1) |
| 68 | + .map(ProblemGetResponse::of) |
| 69 | + .toList(); |
| 70 | + |
| 71 | + List<ProblemGetResponse> forBeforeRating = incorrectProblems.stream() |
| 72 | + .filter(problem -> problem.getProblemRating().getRatingValue() >= 대성마이맥_rating + 1) |
| 73 | + .map(ProblemGetResponse::of) |
| 74 | + .toList(); |
| 75 | + |
| 76 | + return ReviewNoteGetResponse.of( |
| 77 | + testResult, |
| 78 | + averageSolvingTime, |
| 79 | + estimatedRatingGetResponses, |
| 80 | + incorrectProblemService.getResponsesByTestResultId(testResultId), |
| 81 | + forCurrentRating, |
| 82 | + forNextRating, |
| 83 | + forBeforeRating |
| 84 | + ); |
| 85 | + } |
| 86 | + |
| 87 | + private PracticeTest getPracticeTestById(Long practiceTestId) { |
| 88 | + return practiceTestRepository.findById(practiceTestId) |
| 89 | + .orElseThrow(() -> new NotFoundException(ErrorCode.PRACTICE_TEST_NOT_FOUND)); |
| 90 | + } |
19 | 91 | }
|
0 commit comments