Skip to content

Commit d3e83b4

Browse files
committed
[feat/#94] 시작전 새끼문항제출 생성 api 구현
1 parent 25a7ada commit d3e83b4

File tree

6 files changed

+92
-2
lines changed

6 files changed

+92
-2
lines changed

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

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

3+
import com.moplus.moplus_server.client.submit.dto.request.ChildProblemSubmitCreateRequest;
34
import com.moplus.moplus_server.client.submit.dto.request.ProblemSubmitCreateRequest;
45
import com.moplus.moplus_server.client.submit.service.ClientSubmitService;
56
import io.swagger.v3.oas.annotations.Operation;
@@ -20,11 +21,20 @@ public class ClientSubmitController {
2021
private final ClientSubmitService clientSubmitService;
2122

2223
@PostMapping("problemSubmit")
23-
@Operation(summary = "문항 제출 데이터 생성", description = "문항 제출을 '진행중'으로 생성합니다.")
24+
@Operation(summary = "문항 제출 생성", description = "문항 제출을 '진행중'으로 생성합니다.")
2425
public ResponseEntity<Void> createProblemSubmit(
2526
@RequestBody ProblemSubmitCreateRequest request
2627
) {
2728
clientSubmitService.createProblemSubmit(request);
2829
return ResponseEntity.ok(null);
2930
}
31+
32+
@PostMapping("childProblemSubmit")
33+
@Operation(summary = "새끼문항 제출 생성", description = "문항에 속한 새끼문항들을 '시작전'으로 생성합니다.")
34+
public ResponseEntity<Void> createProblemSubmit(
35+
@RequestBody ChildProblemSubmitCreateRequest request
36+
) {
37+
clientSubmitService.createChildProblemSubmit(request);
38+
return ResponseEntity.ok(null);
39+
}
3040
}

src/main/java/com/moplus/moplus_server/client/submit/domain/ChildProblemSubmitStatus.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public enum ChildProblemSubmitStatus {
44
CORRECT,
55
INCORRECT,
6-
RETRY_CORRECT
6+
RETRY_CORRECT,
7+
NOT_STARTED
78
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.moplus.moplus_server.client.submit.dto.request;
2+
3+
public record ChildProblemSubmitCreateRequest(
4+
Long publishId,
5+
Long problemId
6+
) {
7+
}

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

+65
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
package com.moplus.moplus_server.client.submit.service;
22

33

4+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmit;
5+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus;
46
import com.moplus.moplus_server.client.submit.domain.ProblemSubmit;
7+
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
8+
import com.moplus.moplus_server.client.submit.dto.request.ChildProblemSubmitCreateRequest;
59
import com.moplus.moplus_server.client.submit.dto.request.ProblemSubmitCreateRequest;
10+
import com.moplus.moplus_server.client.submit.repository.ChildProblemSubmitRepository;
611
import com.moplus.moplus_server.client.submit.repository.ProblemSubmitRepository;
12+
import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem;
13+
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
14+
import com.moplus.moplus_server.domain.problem.repository.ProblemRepository;
15+
import com.moplus.moplus_server.domain.publish.repository.PublishRepository;
16+
import java.util.List;
717
import java.util.Optional;
818
import lombok.RequiredArgsConstructor;
919
import org.springframework.stereotype.Service;
@@ -14,11 +24,21 @@
1424
public class ClientSubmitService {
1525

1626
private final ProblemSubmitRepository problemSubmitRepository;
27+
private final ProblemRepository problemRepository;
28+
private final ChildProblemSubmitRepository childProblemSubmitRepository;
29+
private final PublishRepository publishRepository;
1730

1831
@Transactional
1932
public void createProblemSubmit(ProblemSubmitCreateRequest request) {
2033

2134
Long memberId = 1L;
35+
36+
// 존재하는 발행인지 검증
37+
publishRepository.existsByIdElseThrow(request.publishId());
38+
39+
// 존재하는 문항인지 검증
40+
problemRepository.existsByIdElseThrow(request.problemId());
41+
2242
// 제출이력이 없을때만 생성
2343
Optional<ProblemSubmit> existingProblemSubmit = problemSubmitRepository.findByMemberIdAndPublishIdAndProblemId(memberId,
2444
request.publishId(), request.problemId());
@@ -27,4 +47,49 @@ public void createProblemSubmit(ProblemSubmitCreateRequest request) {
2747
problemSubmitRepository.save(problemSubmit);
2848
}
2949
}
50+
51+
@Transactional
52+
public void createChildProblemSubmit(ChildProblemSubmitCreateRequest request) {
53+
54+
Long memberId = 1L;
55+
56+
// 존재하는 발행인지 검증
57+
publishRepository.existsByIdElseThrow(request.publishId());
58+
59+
// 존재하는 문항인지 검증
60+
problemRepository.existsByIdElseThrow(request.problemId());
61+
62+
// 문항제출 이력이 없으면 문항제출 생성
63+
Optional<ProblemSubmit> existingProblemSubmit = problemSubmitRepository.findByMemberIdAndPublishIdAndProblemId(memberId,
64+
request.publishId(), request.problemId());
65+
if (existingProblemSubmit.isEmpty()) {
66+
ProblemSubmit problemSubmit = ProblemSubmit.builder()
67+
.memberId(memberId)
68+
.publishId(request.publishId())
69+
.problemId(request.problemId())
70+
.status(ProblemSubmitStatus.IN_PROGRESS)
71+
.build();
72+
problemSubmitRepository.save(problemSubmit);
73+
}
74+
75+
// 문항의 새끼문항 조회
76+
Problem problem = problemRepository.findByIdElseThrow(request.problemId());
77+
List<ChildProblem> childProblems = problem.getChildProblems();
78+
79+
// 제출이력이 없을떄만 생성
80+
for (ChildProblem childProblem : childProblems) {
81+
Long childProblemId = childProblem.getId();
82+
83+
Optional<ChildProblemSubmit> existingChildProblemSubmit = childProblemSubmitRepository.findByMemberIdAndPublishIdAndChildProblemId(memberId,
84+
request.publishId(), childProblemId);
85+
ChildProblemSubmit childProblemSubmit = ChildProblemSubmit.builder()
86+
.memberId(memberId)
87+
.publishId(request.publishId())
88+
.childProblemId(childProblemId)
89+
.status(ChildProblemSubmitStatus.NOT_STARTED)
90+
.build();
91+
childProblemSubmitRepository.save(childProblemSubmit);
92+
}
93+
}
94+
3095
}

src/main/java/com/moplus/moplus_server/domain/problem/repository/ProblemRepository.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ default void existsByProblemAdminIdElseThrow(ProblemCustomId problemCustomId) {
2525
default Problem findByIdElseThrow(Long id) {
2626
return findById(id).orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND));
2727
}
28+
2829
}

src/main/java/com/moplus/moplus_server/domain/publish/repository/PublishRepository.java

+6
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,10 @@ default Publish findByIdElseThrow(Long publishId) {
1515
}
1616

1717
List<Publish> findByProblemSetId(Long problemSetId);
18+
19+
default void existsByIdElseThrow(Long id) {
20+
if (!existsById(id)) {
21+
throw new NotFoundException(ErrorCode.PUBLISH_NOT_FOUND);
22+
}
23+
}
1824
}

0 commit comments

Comments
 (0)