Skip to content

Commit 7363c35

Browse files
committed
[feat] 복습서 데이터
1 parent 7ff80b3 commit 7363c35

File tree

5 files changed

+159
-9
lines changed

5 files changed

+159
-9
lines changed

src/main/java/com/moplus/moplus_server/domain/DetailResultApplication/controller/DetailResultApplicationController.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.moplus.moplus_server.domain.DetailResultApplication.controller;
22

33
import com.moplus.moplus_server.domain.DetailResultApplication.dto.request.DetailResultApplicationPostRequest;
4+
import com.moplus.moplus_server.domain.DetailResultApplication.dto.response.ReviewNoteGetResponse;
45
import com.moplus.moplus_server.domain.DetailResultApplication.service.DetailResultApplicationService;
56
import io.swagger.v3.oas.annotations.Operation;
67
import lombok.RequiredArgsConstructor;
@@ -19,9 +20,10 @@ public class DetailResultApplicationController {
1920

2021
@PostMapping("")
2122
@Operation(summary = "모의고사 결과 상세 분석서 신청하기")
22-
public ResponseEntity<Void> createApplication(@RequestBody DetailResultApplicationPostRequest request) {
23+
public ResponseEntity<ReviewNoteGetResponse> createApplication(@RequestBody DetailResultApplicationPostRequest request) {
2324
detailResultApplicationService.saveApplication(request);
24-
return ResponseEntity.ok().body(null);
25+
ReviewNoteGetResponse reviewNoteInfo = detailResultApplicationService.getReviewNoteInfo(request.testResultId());
26+
return ResponseEntity.ok(reviewNoteInfo);
2527
}
2628

2729
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.moplus.moplus_server.domain.DetailResultApplication.dto.response;
2+
3+
import com.moplus.moplus_server.domain.practiceTest.domain.Problem;
4+
import com.moplus.moplus_server.domain.practiceTest.domain.ProblemImage;
5+
import com.moplus.moplus_server.domain.practiceTest.domain.ProblemRating;
6+
import lombok.Builder;
7+
8+
@Builder
9+
public record ProblemGetResponse(
10+
String problemNumber,
11+
String difficultLevel,
12+
double correctRate,
13+
String rating,
14+
String imageUrl
15+
) {
16+
17+
public static ProblemGetResponse of(
18+
Problem problem
19+
) {
20+
ProblemRating problemRating = problem.getProblemRating();
21+
ProblemImage image = problem.getImage();
22+
return ProblemGetResponse.builder()
23+
.problemNumber(problem.getProblemNumber())
24+
.difficultLevel(problemRating.getDifficultyLevel())
25+
.correctRate(problem.getCorrectRate())
26+
.rating(problemRating.getRating())
27+
.imageUrl(image.getImageUrl())
28+
.build();
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.moplus.moplus_server.domain.DetailResultApplication.dto.response;
2+
3+
import com.moplus.moplus_server.domain.TestResult.dto.response.EstimatedRatingGetResponse;
4+
import com.moplus.moplus_server.domain.TestResult.dto.response.IncorrectProblemGetResponse;
5+
import com.moplus.moplus_server.domain.TestResult.dto.response.RatingTableGetResponse;
6+
import com.moplus.moplus_server.domain.TestResult.dto.response.TestResultGetResponse;
7+
import com.moplus.moplus_server.domain.TestResult.entity.TestResult;
8+
import java.time.Duration;
9+
import java.util.List;
10+
import lombok.Builder;
11+
12+
@Builder
13+
public record ReviewNoteGetResponse(
14+
Long testResultId,
15+
int score,
16+
String solvingTime,
17+
String averageSolvingTime,
18+
List<EstimatedRatingGetResponse> estimatedRatingGetResponses,
19+
List<IncorrectProblemGetResponse> incorrectProblems,
20+
List<ProblemGetResponse> forCurrentRating,
21+
List<ProblemGetResponse> forNextRating,
22+
List<ProblemGetResponse> forBeforeRating
23+
) {
24+
25+
public static ReviewNoteGetResponse of(
26+
TestResult testResult,
27+
Duration averageSolvingTime,
28+
List<EstimatedRatingGetResponse> estimatedRatingGetResponses,
29+
List<IncorrectProblemGetResponse> incorrectProblems,
30+
List<ProblemGetResponse> forCurrentRating,
31+
List<ProblemGetResponse> forNextRating,
32+
List<ProblemGetResponse> forBeforeRating
33+
) {
34+
return ReviewNoteGetResponse.builder()
35+
.testResultId(testResult.getId())
36+
.score(testResult.getScore())
37+
.solvingTime(testResult.getSolvingTime().toString())
38+
.averageSolvingTime(averageSolvingTime.toString())
39+
.estimatedRatingGetResponses(estimatedRatingGetResponses)
40+
.incorrectProblems(incorrectProblems)
41+
.forCurrentRating(forCurrentRating)
42+
.forNextRating(forNextRating)
43+
.forBeforeRating(forBeforeRating)
44+
.build();
45+
}
46+
}

src/main/java/com/moplus/moplus_server/domain/DetailResultApplication/service/DetailResultApplicationService.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
package com.moplus.moplus_server.domain.DetailResultApplication.service;
22

33
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;
46
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;
522
import lombok.RequiredArgsConstructor;
623
import org.springframework.stereotype.Service;
724
import org.springframework.transaction.annotation.Transactional;
@@ -11,9 +28,64 @@
1128
public class DetailResultApplicationService {
1229

1330
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;
1437

1538
@Transactional
1639
public void saveApplication(DetailResultApplicationPostRequest request) {
1740
detailResultApplicationRepository.save(request.toEntity());
1841
}
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+
}
1991
}

src/main/java/com/moplus/moplus_server/domain/practiceTest/domain/ProblemRating.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22

33
import java.util.Arrays;
44
import lombok.AllArgsConstructor;
5-
import lombok.Builder;
65
import lombok.Getter;
76

87
@Getter
98
@AllArgsConstructor
109
public enum ProblemRating {
1110

12-
EXTREME("극상위권", 0, 30, "최상"),
13-
TIER_1("1등급", 30, 50, "상"),
14-
TIER_2("2등급", 50, 60, "중상"),
15-
TIER_3("3등급", 60, 80, "중"),
16-
TIER_4("4등급", 80, 90, "중하"),
17-
OTHER("5등급 이하", 90, 100, "하"),
11+
EXTREME("극상위권",0, 0, 30, "최상"),
12+
TIER_1("1등급",1, 30, 50, "상"),
13+
TIER_2("2등급", 2,50, 60, "중상"),
14+
TIER_3("3등급", 3,60, 80, "중"),
15+
TIER_4("4등급", 4,80, 90, "중하"),
16+
OTHER("5등급 이하", 5,90, 100, "하"),
1817
;
1918

2019
private String rating;
20+
private int ratingValue;
2121
private double startCorrectRateRange;
2222
private double endCorrectRateRange;
2323
private String difficultyLevel;

0 commit comments

Comments
 (0)