diff --git a/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java b/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java index 4e9c161..a38d994 100644 --- a/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java +++ b/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java @@ -2,6 +2,7 @@ import com.moplus.moplus_server.client.problem.dto.response.AllProblemGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ChildProblemClientGetResponse; +import com.moplus.moplus_server.client.problem.dto.response.ChildProblemsClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientThumbnailResponse; import com.moplus.moplus_server.client.problem.dto.response.PublishClientGetResponse; @@ -75,4 +76,13 @@ public ResponseEntity getProblemThumbnail( ) { return ResponseEntity.ok(problemsGetService.getProblemThumbnail(publishId, problemId)); } + + @GetMapping("problem/child/{publishId}/{problemId}") + @Operation(summary = "문항에 포함된 새끼문항 정보 조회", description = "단계별로 풀어보기 이후 화면들에서 필요한 정보들을 조회합니다.") + public ResponseEntity getChildProblems( + @PathVariable Long publishId, + @PathVariable Long problemId + ) { + return ResponseEntity.ok(problemsGetService.getChildProblems(publishId, problemId)); + } } diff --git a/src/main/java/com/moplus/moplus_server/client/problem/dto/response/ChildProblemsClientGetResponse.java b/src/main/java/com/moplus/moplus_server/client/problem/dto/response/ChildProblemsClientGetResponse.java new file mode 100644 index 0000000..e2494eb --- /dev/null +++ b/src/main/java/com/moplus/moplus_server/client/problem/dto/response/ChildProblemsClientGetResponse.java @@ -0,0 +1,19 @@ +package com.moplus.moplus_server.client.problem.dto.response; + +import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; +import com.moplus.moplus_server.domain.problem.domain.problem.Problem; +import java.util.List; +import lombok.Builder; + +@Builder +public record ChildProblemsClientGetResponse( + String mainProblemImageUrl, + List childProblemIds +) { + public static ChildProblemsClientGetResponse of(Problem problem) { + return ChildProblemsClientGetResponse.builder() + .mainProblemImageUrl(problem.getMainProblemImageUrl()) + .childProblemIds(problem.getChildProblems().stream().map(ChildProblem::getId).toList()) + .build(); + } +} diff --git a/src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java b/src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java index 6db65a8..7f80a4f 100644 --- a/src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java +++ b/src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java @@ -4,6 +4,7 @@ import com.moplus.moplus_server.admin.publish.domain.Publish; import com.moplus.moplus_server.client.problem.dto.response.AllProblemGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ChildProblemClientGetResponse; +import com.moplus.moplus_server.client.problem.dto.response.ChildProblemsClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemFeedProgressesGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientThumbnailResponse; @@ -235,4 +236,25 @@ public ProblemClientThumbnailResponse getProblemThumbnail(Long publishId, Long p Problem problem = problemRepository.findByIdElseThrow(problemId); return ProblemClientThumbnailResponse.of(problemNumber + 1, problem); } + + @Transactional(readOnly = true) + public ChildProblemsClientGetResponse getChildProblems(Long publishId, Long problemId) { + // 발행 조회 + Publish publish = publishRepository.findByIdElseThrow(publishId); + denyAccessToFuturePublish(publish); + + // 문항 세트 조회 + ProblemSet problemSet = problemSetRepository.findByIdElseThrow(publish.getProblemSetId()); + List problemIds = problemSet.getProblemIds(); + + // 발행된 문항세트에 포함된 문항인지 검사 + int problemNumber = problemIds.indexOf(problemId); + if (problemNumber == -1) { + throw new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND_IN_PROBLEM_SET); + } + + //문항 조회 + Problem problem = problemRepository.findByIdElseThrow(problemId); + return ChildProblemsClientGetResponse.of(problem); + } }