Skip to content

Commit 2479aa5

Browse files
committed
[feat/#94] 새끼문항 제출 업데이트 api 구현
1 parent 879985f commit 2479aa5

File tree

6 files changed

+67
-4
lines changed

6 files changed

+67
-4
lines changed

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

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

3+
import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus;
34
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
45
import com.moplus.moplus_server.client.submit.dto.request.ChildProblemSubmitCreateRequest;
6+
import com.moplus.moplus_server.client.submit.dto.request.ChildProblemSubmitUpdateRequest;
57
import com.moplus.moplus_server.client.submit.dto.request.ProblemSubmitCreateRequest;
68
import com.moplus.moplus_server.client.submit.dto.request.ProblemSubmitUpdateRequest;
79
import com.moplus.moplus_server.client.submit.service.ClientSubmitService;
@@ -48,4 +50,12 @@ public ResponseEntity<Void> createProblemSubmit(
4850
clientSubmitService.createChildProblemSubmit(request);
4951
return ResponseEntity.ok(null);
5052
}
53+
54+
@PutMapping("childProblemSubmit")
55+
@Operation(summary = "새끼문항 제출 업데이트", description = "제출한 답안을 바탕으로 문항 제출의 상태를 업데이트합니다.")
56+
public ResponseEntity<ChildProblemSubmitStatus> updateChildProblemSubmit(
57+
@RequestBody ChildProblemSubmitUpdateRequest request
58+
) {
59+
return ResponseEntity.ok(clientSubmitService.updateChildProblemSubmit(request));
60+
}
5161
}

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

+4
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,8 @@ public ChildProblemSubmit(Long memberId, Long publishId, Long childProblemId, Ch
3737
this.childProblemId = childProblemId;
3838
this.status = status;
3939
}
40+
41+
public void updateStatus(ChildProblemSubmitStatus status) {
42+
this.status = status;
43+
}
4044
}

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

+14-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,18 @@ public enum ChildProblemSubmitStatus {
44
CORRECT,
55
INCORRECT,
66
RETRY_CORRECT,
7-
NOT_STARTED
7+
NOT_STARTED;
8+
public static ChildProblemSubmitStatus determineStatus(ChildProblemSubmitStatus currentStatus, String memberAnswer, String childProblemAnswer) {
9+
boolean isCorrect = childProblemAnswer.trim().equals(memberAnswer.trim());
10+
11+
if (currentStatus == CORRECT) {
12+
return isCorrect ? CORRECT : INCORRECT;
13+
} else if (currentStatus == INCORRECT) {
14+
return isCorrect ? RETRY_CORRECT : INCORRECT;
15+
} else if (currentStatus == RETRY_CORRECT) {
16+
return isCorrect ? RETRY_CORRECT : INCORRECT;
17+
} else {
18+
return isCorrect ? CORRECT : INCORRECT;
19+
}
20+
}
821
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.moplus.moplus_server.client.submit.dto.request;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
public record ChildProblemSubmitUpdateRequest(
6+
@NotNull(message = "발행 ID는 필수입니다.")
7+
Long publishId,
8+
@NotNull(message = "새끼문항 ID는 필수입니다.")
9+
Long childProblemId,
10+
String answer
11+
) {
12+
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import org.springframework.data.jpa.repository.JpaRepository;
88

99
public interface ChildProblemSubmitRepository extends JpaRepository<ChildProblemSubmit, Long> {
10-
Optional<ChildProblemSubmit> findByMemberIdAndPublishIdAndChildProblemId(Long memberId, Long publishId, Long problemId);
10+
Optional<ChildProblemSubmit> findByMemberIdAndPublishIdAndChildProblemId(Long memberId, Long publishId, Long childProblemId);
1111

12-
default ChildProblemSubmit findByMemberIdAndPublishIdAndChildProblemIdElseThrow(Long memberId, Long publishId, Long problemId) {
13-
return findByMemberIdAndPublishIdAndChildProblemId(memberId, publishId, problemId).orElseThrow(
12+
default ChildProblemSubmit findByMemberIdAndPublishIdAndChildProblemIdElseThrow(Long memberId, Long publishId, Long childProblemId) {
13+
return findByMemberIdAndPublishIdAndChildProblemId(memberId, publishId, childProblemId).orElseThrow(
1414
() -> new NotFoundException(ErrorCode.CHILD_PROBLEM_SUBMIT_NOT_CONFIRMED));
1515
}
1616
}

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

+24
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
import com.moplus.moplus_server.client.submit.domain.ProblemSubmit;
77
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
88
import com.moplus.moplus_server.client.submit.dto.request.ChildProblemSubmitCreateRequest;
9+
import com.moplus.moplus_server.client.submit.dto.request.ChildProblemSubmitUpdateRequest;
910
import com.moplus.moplus_server.client.submit.dto.request.ProblemSubmitCreateRequest;
1011
import com.moplus.moplus_server.client.submit.dto.request.ProblemSubmitUpdateRequest;
1112
import com.moplus.moplus_server.client.submit.repository.ChildProblemSubmitRepository;
1213
import com.moplus.moplus_server.client.submit.repository.ProblemSubmitRepository;
1314
import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem;
1415
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
16+
import com.moplus.moplus_server.domain.problem.repository.ChildProblemRepository;
1517
import com.moplus.moplus_server.domain.problem.repository.ProblemRepository;
1618
import com.moplus.moplus_server.domain.publish.repository.PublishRepository;
1719
import java.util.List;
@@ -28,6 +30,7 @@ public class ClientSubmitService {
2830
private final ProblemRepository problemRepository;
2931
private final ChildProblemSubmitRepository childProblemSubmitRepository;
3032
private final PublishRepository publishRepository;
33+
private final ChildProblemRepository childProblemRepository;
3134

3235
@Transactional
3336
public void createProblemSubmit(ProblemSubmitCreateRequest request) {
@@ -110,4 +113,25 @@ public void createChildProblemSubmit(ChildProblemSubmitCreateRequest request) {
110113
}
111114
}
112115

116+
@Transactional
117+
public ChildProblemSubmitStatus updateChildProblemSubmit(ChildProblemSubmitUpdateRequest request) {
118+
Long memberId = 1L;
119+
120+
// 존재하는 발행인지 검증
121+
publishRepository.existsByIdElseThrow(request.publishId());
122+
123+
// 새끼문항 조회
124+
ChildProblem childProblem = childProblemRepository.findByIdElseThrow(request.childProblemId());
125+
126+
//새끼문항 제출 데이터 조회
127+
ChildProblemSubmit childProblemSubmit = childProblemSubmitRepository.findByMemberIdAndPublishIdAndChildProblemIdElseThrow(memberId,
128+
request.publishId(), request.childProblemId());
129+
// 제출한 답안에 대한 상태 결정
130+
ChildProblemSubmitStatus status = ChildProblemSubmitStatus.determineStatus(childProblemSubmit.getStatus(), request.answer(),
131+
childProblem.getAnswer());
132+
133+
childProblemSubmit.updateStatus(status);
134+
return status;
135+
}
136+
113137
}

0 commit comments

Comments
 (0)