Skip to content

Commit f119973

Browse files
committed
[feat/#94] 사용자 문항 조회 api 구현
1 parent 1ae78de commit f119973

File tree

4 files changed

+69
-0
lines changed

4 files changed

+69
-0
lines changed

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

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.moplus.moplus_server.client.submit.dto.response.AllProblemGetResponse;
44
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
5+
import com.moplus.moplus_server.client.submit.dto.response.ProblemClientGetResponse;
56
import com.moplus.moplus_server.client.submit.service.ClientGetService;
67
import io.swagger.v3.oas.annotations.Operation;
78
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -39,4 +40,13 @@ public ResponseEntity<List<AllProblemGetResponse>> getAllProblem(
3940
) {
4041
return ResponseEntity.ok(clientGetService.getAllProblem(year, month));
4142
}
43+
44+
@GetMapping("problem/{publishId}/{problemId}")
45+
@Operation(summary = "문항 조회", description = "사용자에게 보여지는 문항을 조회합니다.")
46+
public ResponseEntity<ProblemClientGetResponse> getProblem(
47+
@PathVariable Long publishId,
48+
@PathVariable Long problemId
49+
) {
50+
return ResponseEntity.ok(clientGetService.getProblem(publishId, problemId));
51+
}
4252
}
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 com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus;
4+
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
5+
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
6+
import java.util.List;
7+
import lombok.Builder;
8+
9+
@Builder
10+
public record ProblemClientGetResponse(
11+
int number,
12+
String imageUrl,
13+
Integer recommendedMinute,
14+
Integer recommendedSecond,
15+
ProblemSubmitStatus status,
16+
List<ChildProblemSubmitStatus> childProblemStatuses
17+
) {
18+
public static ProblemClientGetResponse of(Problem problem, ProblemSubmitStatus status, List<ChildProblemSubmitStatus> childProblemStatuses) {
19+
return ProblemClientGetResponse.builder()
20+
.number(problem.getNumber())
21+
.imageUrl(problem.getMainProblemImageUrl())
22+
.status(status)
23+
.childProblemStatuses(childProblemStatuses)
24+
.recommendedMinute(problem.getRecommendedTime().getMinute())
25+
.recommendedSecond(problem.getRecommendedTime().getSecond())
26+
.build();
27+
}
28+
}

src/main/java/com/moplus/moplus_server/client/submit/repository/ChildProblemSubmitRepository.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmit;
44
import com.moplus.moplus_server.global.error.exception.ErrorCode;
55
import com.moplus.moplus_server.global.error.exception.NotFoundException;
6+
import java.util.List;
67
import java.util.Optional;
78
import org.springframework.data.jpa.repository.JpaRepository;
89

@@ -13,4 +14,7 @@ default ChildProblemSubmit findByMemberIdAndPublishIdAndChildProblemIdElseThrow(
1314
return findByMemberIdAndPublishIdAndChildProblemId(memberId, publishId, childProblemId).orElseThrow(
1415
() -> new NotFoundException(ErrorCode.CHILD_PROBLEM_SUBMIT_NOT_CONFIRMED));
1516
}
17+
18+
List<ChildProblemSubmit> findAllByMemberIdAndPublishIdAndChildProblemIdIn(Long memberId, Long publishId,
19+
List<Long> childProblemIds);
1620
}

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

+27
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22

33

44
import com.moplus.moplus_server.admin.publish.domain.Publish;
5+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmit;
6+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus;
57
import com.moplus.moplus_server.client.submit.domain.ProblemSubmit;
68
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
79
import com.moplus.moplus_server.client.submit.dto.response.AllProblemGetResponse;
810
import com.moplus.moplus_server.client.submit.dto.response.ChildProblemDetailResponse;
911
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
1012
import com.moplus.moplus_server.client.submit.dto.response.DayProgress;
1113
import com.moplus.moplus_server.client.submit.dto.response.PrescriptionResponse;
14+
import com.moplus.moplus_server.client.submit.dto.response.ProblemClientGetResponse;
1215
import com.moplus.moplus_server.client.submit.dto.response.ProblemDetailResponse;
1316
import com.moplus.moplus_server.client.submit.repository.ChildProblemSubmitRepository;
1417
import com.moplus.moplus_server.client.submit.repository.ProblemSubmitRepository;
18+
import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem;
1519
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
1620
import com.moplus.moplus_server.domain.problem.repository.ProblemRepository;
1721
import com.moplus.moplus_server.domain.problemset.repository.ProblemSetRepository;
@@ -116,4 +120,27 @@ private String getMainProblemImageUrl(Long problemSetId) {
116120
.map(Problem::getMainProblemImageUrl)
117121
.orElse(null);
118122
}
123+
124+
@Transactional(readOnly = true)
125+
public ProblemClientGetResponse getProblem(Long publishId, Long problemId) {
126+
Long memberId = 1L;
127+
128+
Problem problem = problemRepository.findByIdElseThrow(problemId);
129+
130+
// 문항 제출 조회
131+
ProblemSubmit problemSubmit = problemSubmitRepository.findByMemberIdAndPublishIdAndProblemIdElseThrow(memberId,
132+
publishId, problemId);
133+
134+
// 새끼 문항 제출 상태 조회
135+
List<Long> childProblemIds = problem.getChildProblems().stream()
136+
.map(ChildProblem::getId)
137+
.toList();
138+
139+
List<ChildProblemSubmitStatus> childProblemStatuses = childProblemSubmitRepository.findAllByMemberIdAndPublishIdAndChildProblemIdIn(
140+
memberId, publishId, childProblemIds).stream()
141+
.map(ChildProblemSubmit::getStatus)
142+
.toList();
143+
144+
return ProblemClientGetResponse.of(problem, problemSubmit.getStatus(), childProblemStatuses);
145+
}
119146
}

0 commit comments

Comments
 (0)