Skip to content

Commit 68aac4d

Browse files
committed
[fix/#94] 클라이언트 패키징 분리
1 parent 67a9f0a commit 68aac4d

File tree

6 files changed

+142
-94
lines changed

6 files changed

+142
-94
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.moplus.moplus_server.client.submit.controller;
2+
3+
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
4+
import com.moplus.moplus_server.client.submit.service.CommentaryGetService;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.tags.Tag;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
import org.springframework.web.bind.annotation.RequestParam;
12+
import org.springframework.web.bind.annotation.RestController;
13+
14+
@Tag(name = "클라이언트 해설 조회", description = "클라이언트 해설 조회 관련 API")
15+
@RestController
16+
@RequestMapping("/api/v1/client")
17+
@RequiredArgsConstructor
18+
public class CommentaryGetController {
19+
20+
private final CommentaryGetService commentaryGetService;
21+
22+
@GetMapping("commentary")
23+
@Operation(summary = "해설 조회", description = "문항 별 해설/처방을 조회합니다.")
24+
public ResponseEntity<CommentaryGetResponse> getCommentary(
25+
@RequestParam(value = "publishId", required = false) Long publishId,
26+
@RequestParam(value = "problemId", required = false) Long problemId
27+
) {
28+
return ResponseEntity.ok(commentaryGetService.getCommentary(publishId, problemId));
29+
}
30+
}

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

+8-19
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
import com.moplus.moplus_server.client.submit.dto.response.AllProblemGetResponse;
44
import com.moplus.moplus_server.client.submit.dto.response.ChildProblemClientGetResponse;
5-
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
65
import com.moplus.moplus_server.client.submit.dto.response.ProblemClientGetResponse;
7-
import com.moplus.moplus_server.client.submit.service.ClientGetService;
6+
import com.moplus.moplus_server.client.submit.service.ProblemsGetService;
87
import io.swagger.v3.oas.annotations.Operation;
98
import io.swagger.v3.oas.annotations.tags.Tag;
109
import java.util.List;
@@ -13,33 +12,23 @@
1312
import org.springframework.web.bind.annotation.GetMapping;
1413
import org.springframework.web.bind.annotation.PathVariable;
1514
import org.springframework.web.bind.annotation.RequestMapping;
16-
import org.springframework.web.bind.annotation.RequestParam;
1715
import org.springframework.web.bind.annotation.RestController;
1816

19-
@Tag(name = "클라이언트 조회", description = "클라이언트 조회 관련 API")
17+
@Tag(name = "클라이언트 문제 조회", description = "클라이언트 문제 조회 관련 API")
2018
@RestController
2119
@RequestMapping("/api/v1/client")
2220
@RequiredArgsConstructor
23-
public class ClientGetController {
21+
public class ProblemGetController {
2422

25-
private final ClientGetService clientGetService;
23+
private final ProblemsGetService problemsGetService;
2624

27-
@GetMapping("commentary")
28-
@Operation(summary = "해설 조회", description = "문항 별 해설/처방을 조회합니다.")
29-
public ResponseEntity<CommentaryGetResponse> getCommentary(
30-
@RequestParam(value = "publishId", required = false) Long publishId,
31-
@RequestParam(value = "problemId", required = false) Long problemId
32-
) {
33-
return ResponseEntity.ok(clientGetService.getCommentary(publishId, problemId));
34-
}
35-
36-
@GetMapping("allProblem/{year}/{month}")
25+
@GetMapping("problem/all/{year}/{month}")
3726
@Operation(summary = "전체 문제 조회", description = "월별 문제들에 대한 진행도와 정보들을 조회합니다.")
3827
public ResponseEntity<List<AllProblemGetResponse>> getAllProblem(
3928
@PathVariable int year,
4029
@PathVariable int month
4130
) {
42-
return ResponseEntity.ok(clientGetService.getAllProblem(year, month));
31+
return ResponseEntity.ok(problemsGetService.getAllProblem(year, month));
4332
}
4433

4534
@GetMapping("problem/{publishId}/{problemId}")
@@ -48,7 +37,7 @@ public ResponseEntity<ProblemClientGetResponse> getProblem(
4837
@PathVariable Long publishId,
4938
@PathVariable Long problemId
5039
) {
51-
return ResponseEntity.ok(clientGetService.getProblem(publishId, problemId));
40+
return ResponseEntity.ok(problemsGetService.getProblem(publishId, problemId));
5241
}
5342

5443
@GetMapping("problem/{publishId}/{problemId}/{childProblemId}")
@@ -58,6 +47,6 @@ public ResponseEntity<ChildProblemClientGetResponse> getChildProblem(
5847
@PathVariable Long problemId,
5948
@PathVariable Long childProblemId
6049
) {
61-
return ResponseEntity.ok(clientGetService.getChildProblem(publishId, problemId, childProblemId));
50+
return ResponseEntity.ok(problemsGetService.getChildProblem(publishId, problemId, childProblemId));
6251
}
6352
}

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

+6-9
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,11 @@ public enum ChildProblemSubmitStatus {
88
public static ChildProblemSubmitStatus determineStatus(ChildProblemSubmitStatus currentStatus, String memberAnswer, String childProblemAnswer) {
99
boolean isCorrect = childProblemAnswer.trim().equals(memberAnswer.trim());
1010

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-
}
11+
return switch (currentStatus) {
12+
case CORRECT -> isCorrect ? CORRECT : INCORRECT;
13+
case INCORRECT -> isCorrect ? RETRY_CORRECT : INCORRECT;
14+
case RETRY_CORRECT -> isCorrect ? RETRY_CORRECT : INCORRECT;
15+
default -> isCorrect ? CORRECT : INCORRECT;
16+
};
2017
}
2118
}

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

+6-9
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,11 @@ public enum ProblemSubmitStatus {
88
public static ProblemSubmitStatus determineStatus(ProblemSubmitStatus currentStatus, String memberAnswer, String problemAnswer) {
99
boolean isCorrect = problemAnswer.trim().equals(memberAnswer.trim());
1010

11-
if (currentStatus == CORRECT) {
12-
return isCorrect ? CORRECT : INCORRECT;
13-
} else if (currentStatus == INCORRECT) {
14-
return isCorrect ? RETRY_CORRECT : INCORRECT;
15-
} else if (currentStatus == IN_PROGRESS) {
16-
return isCorrect ? CORRECT : INCORRECT;
17-
} else {
18-
return isCorrect ? RETRY_CORRECT : INCORRECT;
19-
}
11+
return switch (currentStatus) {
12+
case CORRECT -> isCorrect ? CORRECT : INCORRECT;
13+
case INCORRECT -> isCorrect ? RETRY_CORRECT : INCORRECT;
14+
case IN_PROGRESS -> isCorrect ? CORRECT : INCORRECT;
15+
default -> isCorrect ? RETRY_CORRECT : INCORRECT;
16+
};
2017
}
2118
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.moplus.moplus_server.client.submit.service;
2+
3+
import com.moplus.moplus_server.admin.publish.domain.Publish;
4+
import com.moplus.moplus_server.client.submit.domain.ProblemSubmit;
5+
import com.moplus.moplus_server.client.submit.dto.response.ChildProblemDetailResponse;
6+
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
7+
import com.moplus.moplus_server.client.submit.dto.response.PrescriptionResponse;
8+
import com.moplus.moplus_server.client.submit.dto.response.ProblemDetailResponse;
9+
import com.moplus.moplus_server.client.submit.repository.ChildProblemSubmitRepository;
10+
import com.moplus.moplus_server.client.submit.repository.ProblemSubmitRepository;
11+
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
12+
import com.moplus.moplus_server.domain.problem.repository.ProblemRepository;
13+
import com.moplus.moplus_server.domain.problemset.domain.ProblemSet;
14+
import com.moplus.moplus_server.domain.problemset.repository.ProblemSetRepository;
15+
import com.moplus.moplus_server.domain.publish.repository.PublishRepository;
16+
import com.moplus.moplus_server.global.error.exception.ErrorCode;
17+
import com.moplus.moplus_server.global.error.exception.InvalidValueException;
18+
import com.moplus.moplus_server.global.error.exception.NotFoundException;
19+
import java.time.LocalDate;
20+
import java.util.List;
21+
import lombok.RequiredArgsConstructor;
22+
import org.springframework.stereotype.Service;
23+
import org.springframework.transaction.annotation.Transactional;
24+
25+
@Service
26+
@RequiredArgsConstructor
27+
public class CommentaryGetService {
28+
29+
private final PublishRepository publishRepository;
30+
private final ProblemSubmitRepository problemSubmitRepository;
31+
private final ProblemRepository problemRepository;
32+
private final ProblemSetRepository problemSetRepository;
33+
private final ChildProblemSubmitRepository childProblemSubmitRepository;
34+
35+
@Transactional(readOnly = true)
36+
public CommentaryGetResponse getCommentary(Long publishId, Long problemId) {
37+
Long memberId = 1L;
38+
39+
// 발행 조회
40+
Publish publish = publishRepository.findByIdElseThrow(publishId);
41+
denyAccessToFuturePublish(publish);
42+
43+
// 문항 제출 조회
44+
ProblemSubmit problemSubmit = problemSubmitRepository.findByMemberIdAndPublishIdAndProblemIdElseThrow(memberId,
45+
publishId, problemId);
46+
47+
// 문항 해설 생성
48+
Problem problem = problemRepository.findByIdElseThrow(problemId);
49+
ProblemDetailResponse mainProblem = ProblemDetailResponse.of(
50+
problem.getMainProblemImageUrl(),
51+
problem.getPrescriptionImageUrls(),
52+
problemSubmit.getStatus()
53+
);
54+
55+
// 새끼문항 해설 생성
56+
List<ChildProblemDetailResponse> childProblem = problem.getChildProblems().stream()
57+
.map(cp -> ChildProblemDetailResponse.of(
58+
cp.getImageUrl(),
59+
cp.getPrescriptionImageUrls(),
60+
childProblemSubmitRepository.findByMemberIdAndPublishIdAndChildProblemIdElseThrow(memberId, publishId,
61+
cp.getId()).getStatus()
62+
)).toList();
63+
64+
// 처방 정보 생성
65+
PrescriptionResponse prescription = PrescriptionResponse.of(childProblem, mainProblem);
66+
67+
// 문항 번호 추출
68+
ProblemSet problemSet = problemSetRepository.findByIdElseThrow(publish.getProblemSetId());
69+
List<Long> problemIds = problemSet.getProblemIds();
70+
int number = problemIds.indexOf(problemId);
71+
if (number == -1) {
72+
throw new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND_IN_PROBLEM_SET);
73+
}
74+
75+
return CommentaryGetResponse.of(
76+
number + 1,
77+
problem.getAnswer(),
78+
problem.getMainAnalysisImageUrl(),
79+
problem.getMainHandwritingExplanationImageUrl(),
80+
problem.getReadingTipImageUrl(),
81+
problem.getSeniorTipImageUrl(),
82+
prescription
83+
);
84+
}
85+
86+
private void denyAccessToFuturePublish(Publish publish){
87+
if (publish.getPublishedDate().isAfter(LocalDate.now())) {
88+
throw new InvalidValueException(ErrorCode.FUTURE_PUBLISH_NOT_ACCESSIBLE);
89+
}
90+
}
91+
}

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

+1-57
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,8 @@
88
import com.moplus.moplus_server.client.submit.domain.ProblemSubmitStatus;
99
import com.moplus.moplus_server.client.submit.dto.response.AllProblemGetResponse;
1010
import com.moplus.moplus_server.client.submit.dto.response.ChildProblemClientGetResponse;
11-
import com.moplus.moplus_server.client.submit.dto.response.ChildProblemDetailResponse;
12-
import com.moplus.moplus_server.client.submit.dto.response.CommentaryGetResponse;
1311
import com.moplus.moplus_server.client.submit.dto.response.DayProgress;
14-
import com.moplus.moplus_server.client.submit.dto.response.PrescriptionResponse;
1512
import com.moplus.moplus_server.client.submit.dto.response.ProblemClientGetResponse;
16-
import com.moplus.moplus_server.client.submit.dto.response.ProblemDetailResponse;
1713
import com.moplus.moplus_server.client.submit.repository.ChildProblemSubmitRepository;
1814
import com.moplus.moplus_server.client.submit.repository.ProblemSubmitRepository;
1915
import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem;
@@ -29,14 +25,13 @@
2925
import java.time.LocalDate;
3026
import java.util.ArrayList;
3127
import java.util.List;
32-
import javax.swing.undo.CannotUndoException;
3328
import lombok.RequiredArgsConstructor;
3429
import org.springframework.stereotype.Service;
3530
import org.springframework.transaction.annotation.Transactional;
3631

3732
@Service
3833
@RequiredArgsConstructor
39-
public class ClientGetService {
34+
public class ProblemsGetService {
4035

4136
private final PublishRepository publishRepository;
4237
private final ProblemSubmitRepository problemSubmitRepository;
@@ -45,57 +40,6 @@ public class ClientGetService {
4540
private final ChildProblemSubmitRepository childProblemSubmitRepository;
4641
private final ChildProblemRepository childProblemRepository;
4742

48-
@Transactional(readOnly = true)
49-
public CommentaryGetResponse getCommentary(Long publishId, Long problemId) {
50-
Long memberId = 1L;
51-
52-
// 발행 조회
53-
Publish publish = publishRepository.findByIdElseThrow(publishId);
54-
denyAccessToFuturePublish(publish);
55-
56-
// 문항 제출 조회
57-
ProblemSubmit problemSubmit = problemSubmitRepository.findByMemberIdAndPublishIdAndProblemIdElseThrow(memberId,
58-
publishId, problemId);
59-
60-
// 문항 해설 생성
61-
Problem problem = problemRepository.findByIdElseThrow(problemId);
62-
ProblemDetailResponse mainProblem = ProblemDetailResponse.of(
63-
problem.getMainProblemImageUrl(),
64-
problem.getPrescriptionImageUrls(),
65-
problemSubmit.getStatus()
66-
);
67-
68-
// 새끼문항 해설 생성
69-
List<ChildProblemDetailResponse> childProblem = problem.getChildProblems().stream()
70-
.map(cp -> ChildProblemDetailResponse.of(
71-
cp.getImageUrl(),
72-
cp.getPrescriptionImageUrls(),
73-
childProblemSubmitRepository.findByMemberIdAndPublishIdAndChildProblemIdElseThrow(memberId, publishId,
74-
cp.getId()).getStatus()
75-
)).toList();
76-
77-
// 처방 정보 생성
78-
PrescriptionResponse prescription = PrescriptionResponse.of(childProblem, mainProblem);
79-
80-
// 문항 번호 추출
81-
ProblemSet problemSet = problemSetRepository.findByIdElseThrow(publish.getProblemSetId());
82-
List<Long> problemIds = problemSet.getProblemIds();
83-
int number = problemIds.indexOf(problemId);
84-
if (number == -1) {
85-
throw new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND_IN_PROBLEM_SET);
86-
}
87-
88-
return CommentaryGetResponse.of(
89-
number + 1,
90-
problem.getAnswer(),
91-
problem.getMainAnalysisImageUrl(),
92-
problem.getMainHandwritingExplanationImageUrl(),
93-
problem.getReadingTipImageUrl(),
94-
problem.getSeniorTipImageUrl(),
95-
prescription
96-
);
97-
}
98-
9943
@Transactional(readOnly = true)
10044
public List<AllProblemGetResponse> getAllProblem(int year, int month) {
10145
Long memberId = 1L;

0 commit comments

Comments
 (0)