Skip to content

Commit 5905789

Browse files
committed
[feat/#94] 해설 조회 api 구현
1 parent 2d598e0 commit 5905789

File tree

9 files changed

+176
-0
lines changed

9 files changed

+176
-0
lines changed

src/main/java/com/moplus/moplus_server/client/submit/controller/ClientGetController.java

+11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.moplus.moplus_server.client.submit.controller;
22

33
import com.moplus.moplus_server.client.submit.dto.response.AllProblemGetResponse;
4+
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
45
import com.moplus.moplus_server.client.submit.service.ClientGetService;
56
import io.swagger.v3.oas.annotations.Operation;
67
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -10,6 +11,7 @@
1011
import org.springframework.web.bind.annotation.GetMapping;
1112
import org.springframework.web.bind.annotation.PathVariable;
1213
import org.springframework.web.bind.annotation.RequestMapping;
14+
import org.springframework.web.bind.annotation.RequestParam;
1315
import org.springframework.web.bind.annotation.RestController;
1416

1517
@Tag(name = "클라이언트 조회", description = "클라이언트 조회 관련 API")
@@ -20,6 +22,15 @@ public class ClientGetController {
2022

2123
private final ClientGetService clientGetService;
2224

25+
@GetMapping("commentary")
26+
@Operation(summary = "해설 조회", description = "문항 별 해설/처방을 조회합니다.")
27+
public ResponseEntity<CommentaryGetResponse> getCommentary(
28+
@RequestParam(value = "publishId", required = false) Long publishId,
29+
@RequestParam(value = "problemId", required = false) Long problemId
30+
) {
31+
return ResponseEntity.ok(clientGetService.getCommentary(publishId, problemId));
32+
}
33+
2334
@GetMapping("allProblem/{year}/{month}")
2435
@Operation(summary = "전체 문제 조회", description = "월별 문제들에 대한 진행도와 정보들을 조회합니다.")
2536
public ResponseEntity<List<AllProblemGetResponse>> getAllProblem(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.moplus.moplus_server.client.submit.dto.response;
2+
3+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus;
4+
import java.util.List;
5+
import lombok.Builder;
6+
7+
@Builder
8+
public record ChildProblemDetailResponse(
9+
String imageUrl,
10+
List<String> prescriptionImageUrls,
11+
ChildProblemSubmitStatus submitStatus
12+
) {
13+
public static ChildProblemDetailResponse of(String imageUrl, List<String> prescriptionImageUrls, ChildProblemSubmitStatus submitStatus) {
14+
return ChildProblemDetailResponse.builder()
15+
.imageUrl(imageUrl)
16+
.prescriptionImageUrls(prescriptionImageUrls)
17+
.submitStatus(submitStatus)
18+
.build();
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.moplus.moplus_server.client.submit.dto.response;
2+
3+
import lombok.Builder;
4+
5+
@Builder
6+
public record CommentaryGetResponse(
7+
int problemNumber,
8+
String answer,
9+
String mainAnalysisImageUrl,
10+
String mainHandwritingExplanationImageUrl,
11+
String readingTipImageUrl,
12+
String seniorTipImageUrl,
13+
PrescriptionResponse prescription
14+
) {
15+
public static CommentaryGetResponse of(int problemNumber, String answer, String mainAnalysisImageUrl,
16+
String mainHandwritingExplanationImageUrl, String readingTipImageUrl,
17+
String seniorTipImageUrl, PrescriptionResponse prescription) {
18+
return CommentaryGetResponse.builder()
19+
.problemNumber(problemNumber)
20+
.answer(answer)
21+
.mainAnalysisImageUrl(mainAnalysisImageUrl)
22+
.mainHandwritingExplanationImageUrl(mainHandwritingExplanationImageUrl)
23+
.readingTipImageUrl(readingTipImageUrl)
24+
.seniorTipImageUrl(seniorTipImageUrl)
25+
.prescription(prescription)
26+
.build();
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.moplus.moplus_server.client.submit.dto.response;
2+
3+
import java.util.List;
4+
import lombok.Builder;
5+
6+
@Builder
7+
public record PrescriptionResponse(
8+
List<ChildProblemDetailResponse> childProblem,
9+
ProblemDetailResponse mainProblem
10+
) {
11+
public static PrescriptionResponse of(List<ChildProblemDetailResponse> childProblem,
12+
ProblemDetailResponse mainProblem) {
13+
return PrescriptionResponse.builder()
14+
.childProblem(childProblem)
15+
.mainProblem(mainProblem)
16+
.build();
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.moplus.moplus_server.client.submit.dto.response;
2+
3+
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
4+
import java.util.List;
5+
import lombok.Builder;
6+
7+
@Builder
8+
public record ProblemDetailResponse(
9+
String imageUrl,
10+
List<String> prescriptionImageUrls,
11+
ProblemSubmitStatus submitStatus
12+
) {
13+
public static ProblemDetailResponse of(String imageUrl, List<String> prescriptionImageUrls, ProblemSubmitStatus submitStatus) {
14+
return ProblemDetailResponse.builder()
15+
.imageUrl(imageUrl)
16+
.prescriptionImageUrls(prescriptionImageUrls)
17+
.submitStatus(submitStatus)
18+
.build();
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.moplus.moplus_server.client.submit.repository;
2+
3+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmit;
4+
import com.moplus.moplus_server.global.error.exception.ErrorCode;
5+
import com.moplus.moplus_server.global.error.exception.NotFoundException;
6+
import java.util.Optional;
7+
import org.springframework.data.jpa.repository.JpaRepository;
8+
9+
public interface ChildProblemSubmitRepository extends JpaRepository<ChildProblemSubmit, Long> {
10+
Optional<ChildProblemSubmit> findByMemberIdAndPublishIdAndChildProblemId(Long memberId, Long publishId, Long problemId);
11+
12+
default ChildProblemSubmit findByMemberIdAndPublishIdAndChildProblemIdElseThrow(Long memberId, Long publishId, Long problemId) {
13+
return findByMemberIdAndPublishIdAndChildProblemId(memberId, publishId, problemId).orElseThrow(
14+
() -> new NotFoundException(ErrorCode.CHILD_PROBLEM_SUBMIT_NOT_CONFIRMED));
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
package com.moplus.moplus_server.client.submit.repository;
22

33
import com.moplus.moplus_server.client.submit.domain.ProblemSubmit;
4+
import com.moplus.moplus_server.global.error.exception.ErrorCode;
5+
import com.moplus.moplus_server.global.error.exception.NotFoundException;
46
import java.util.List;
7+
import java.util.Optional;
58
import org.springframework.data.jpa.repository.JpaRepository;
69

710
public interface ProblemSubmitRepository extends JpaRepository<ProblemSubmit, Long> {
811
List<ProblemSubmit> findByMemberIdAndPublishId(Long memberId, Long publishId);
12+
13+
Optional<ProblemSubmit> findByMemberIdAndPublishIdAndProblemId(Long memberId, Long publishId, Long problemId);
14+
15+
default ProblemSubmit findByMemberIdAndPublishIdAndProblemIdElseThrow(Long memberId, Long publishId, Long problemId) {
16+
return findByMemberIdAndPublishIdAndProblemId(memberId, publishId, problemId).orElseThrow(
17+
() -> new NotFoundException(ErrorCode.PROBLEM_SUBMIT_NOT_CONFIRMED));
18+
}
919
}

src/main/java/com/moplus/moplus_server/client/submit/service/ClientGetService.java

+47
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
import com.moplus.moplus_server.client.submit.domain.ProblemSubmit;
66
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
77
import com.moplus.moplus_server.client.submit.dto.response.AllProblemGetResponse;
8+
import com.moplus.moplus_server.client.submit.dto.response.ChildProblemDetailResponse;
9+
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
810
import com.moplus.moplus_server.client.submit.dto.response.DayProgress;
11+
import com.moplus.moplus_server.client.submit.dto.response.PrescriptionResponse;
12+
import com.moplus.moplus_server.client.submit.dto.response.ProblemDetailResponse;
13+
import com.moplus.moplus_server.client.submit.repository.ChildProblemSubmitRepository;
914
import com.moplus.moplus_server.client.submit.repository.ProblemSubmitRepository;
1015
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
1116
import com.moplus.moplus_server.domain.problem.repository.ProblemRepository;
@@ -28,6 +33,48 @@ public class ClientGetService {
2833
private final ProblemSubmitRepository problemSubmitRepository;
2934
private final ProblemRepository problemRepository;
3035
private final ProblemSetRepository problemSetRepository;
36+
private final ChildProblemSubmitRepository childProblemSubmitRepository;
37+
38+
39+
@Transactional(readOnly = true)
40+
public CommentaryGetResponse getCommentary(Long publishId, Long problemId) {
41+
42+
Long memberId = 1L;
43+
44+
// 문항 제출 조회
45+
ProblemSubmit problemSubmit = problemSubmitRepository.findByMemberIdAndPublishIdAndProblemIdElseThrow(memberId,
46+
publishId, problemId);
47+
48+
// 문항 해설 생성
49+
Problem problem = problemRepository.findByIdElseThrow(problemId);
50+
ProblemDetailResponse mainProblem = ProblemDetailResponse.of(
51+
problem.getMainProblemImageUrl(),
52+
problem.getPrescriptionImageUrls(),
53+
problemSubmit.getStatus()
54+
);
55+
56+
// 새끼문항 해설 생성
57+
List<ChildProblemDetailResponse> childProblem = problem.getChildProblems().stream()
58+
.map(cp -> ChildProblemDetailResponse.of(
59+
cp.getImageUrl(),
60+
cp.getPrescriptionImageUrls(),
61+
childProblemSubmitRepository.findByMemberIdAndPublishIdAndChildProblemIdElseThrow(memberId, publishId,
62+
cp.getId()).getStatus()
63+
)).toList();
64+
65+
// 처방 정보 생성
66+
PrescriptionResponse prescription = PrescriptionResponse.of(childProblem, mainProblem);
67+
68+
return CommentaryGetResponse.of(
69+
problem.getNumber(),
70+
problem.getAnswer(),
71+
problem.getMainAnalysisImageUrl(),
72+
problem.getMainHandwritingExplanationImageUrl(),
73+
problem.getReadingTipImageUrl(),
74+
problem.getSeniorTipImageUrl(),
75+
prescription
76+
);
77+
}
3178

3279
@Transactional(readOnly = true)
3380
public List<AllProblemGetResponse> getAllProblem(int year, int month) {

src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java

+6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ public enum ErrorCode {
7676
ALREADY_PUBLISHED_ERROR(HttpStatus.BAD_REQUEST, "이미 발행된 문항세트는 컨펌해제할 수 없습니다."),
7777
PROBLEM_SET_DELETED(HttpStatus.BAD_REQUEST, "삭제된 문항세트는 발행할 수 없습니다"),
7878
PROBLEM_SET_NOT_CONFIRMED(HttpStatus.BAD_REQUEST, "컨펌되지 않은 문항세트는 발행할 수 없습니다"),
79+
80+
// 문항 제출
81+
PROBLEM_SUBMIT_NOT_CONFIRMED(HttpStatus.NOT_FOUND, "문항 제출 정보를 찾을 수 없습니다."),
82+
83+
// 새끼문항 제출
84+
CHILD_PROBLEM_SUBMIT_NOT_CONFIRMED(HttpStatus.NOT_FOUND, "새끼문항 제출 정보를 찾을 수 없습니다."),
7985
;
8086

8187

0 commit comments

Comments
 (0)