Skip to content

Commit 0d7480b

Browse files
committed
[refactor/#83] problem, childproblem 코드 리팩토링
1 parent eba2a63 commit 0d7480b

File tree

6 files changed

+68
-39
lines changed

6 files changed

+68
-39
lines changed

src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
@Generated(
1717
value = "org.mapstruct.ap.MappingProcessor",
18-
date = "2025-03-14T20:25:51+0900",
18+
date = "2025-03-15T21:23:23+0900",
1919
comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)"
2020
)
2121
@Component

src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemType.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,12 @@ public enum ProblemType {
1313

1414
private final String name;
1515
private final int code;
16+
17+
public boolean isCreationProblem() {
18+
return this == CREATION_PROBLEM;
19+
}
20+
21+
public boolean requiresPracticeTest() {
22+
return !isCreationProblem();
23+
}
1624
}

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ default void existsByIdElseThrow(Long id) {
1919
}
2020
}
2121

22-
default void existsByProblemAdminIdElseThrow(ProblemCustomId problemCustomId) {
23-
if (!existsByProblemCustomId(problemCustomId)) {
24-
throw new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND);
25-
}
26-
}
27-
2822
@Query("SELECT DISTINCT p FROM Problem p " +
2923
"LEFT JOIN FETCH p.childProblems c " +
3024
"WHERE p.id = :id")

src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,30 @@ public class ChildProblemService {
1717

1818
@Transactional
1919
public Long createChildProblem(Long problemId) {
20-
Problem problem = problemRepository.findByIdElseThrow(problemId);
21-
if (problem.isConfirmed()) {
22-
throw new InvalidValueException(ErrorCode.CHILD_PROBLEM_UPDATE_AFTER_CONFIRMED);
23-
}
24-
25-
problem.addChildProblem(ChildProblem.createEmptyChildProblem());
26-
27-
return problemRepository.save(problem).getChildProblems().get(problem.getChildProblems().size() - 1).getId();
20+
Problem problem = findAndValidateProblem(problemId);
21+
ChildProblem newChildProblem = ChildProblem.createEmptyChildProblem();
22+
problem.addChildProblem(newChildProblem);
23+
24+
return getCreatedChildProblemId(problem);
2825
}
2926

3027
@Transactional
3128
public void deleteChildProblem(Long problemId, Long childProblemId) {
29+
Problem problem = findAndValidateProblem(problemId);
30+
problem.deleteChildProblem(childProblemId);
31+
}
32+
33+
private Problem findAndValidateProblem(Long problemId) {
3234
Problem problem = problemRepository.findByIdElseThrow(problemId);
3335
if (problem.isConfirmed()) {
3436
throw new InvalidValueException(ErrorCode.CHILD_PROBLEM_UPDATE_AFTER_CONFIRMED);
3537
}
36-
problem.deleteChildProblem(childProblemId);
37-
problemRepository.save(problem);
38+
return problem;
39+
}
40+
41+
private Long getCreatedChildProblemId(Problem problem) {
42+
return problem.getChildProblems()
43+
.get(problem.getChildProblems().size() - 1)
44+
.getId();
3845
}
3946
}

src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,32 @@ public class ProblemSaveService {
2525

2626
@Transactional
2727
public ProblemPostResponse createProblem(ProblemPostRequest request) {
28-
Problem problem;
29-
if (request.problemType() != ProblemType.CREATION_PROBLEM) {
30-
PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId());
31-
ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag,
32-
request.problemType());
28+
PracticeTestTag practiceTestTag = getPracticeTestTag(request);
29+
ProblemCustomId problemCustomId = createProblemCustomId(request);
30+
Problem problem = createProblem(request, problemCustomId, practiceTestTag);
31+
32+
return ProblemPostResponse.of(problemRepository.save(problem));
33+
}
3334

34-
problem = problemMapper.from(request, problemCustomId, practiceTestTag);
35-
} else {
36-
ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.problemType());
37-
problem = problemMapper.from(request.problemType(), problemCustomId);
35+
private Problem createProblem(ProblemPostRequest request, ProblemCustomId problemCustomId, PracticeTestTag practiceTestTag) {
36+
if (request.problemType().isCreationProblem()) {
37+
return problemMapper.from(request, problemCustomId, practiceTestTag);
3838
}
39+
return problemMapper.from(request.problemType(), problemCustomId);
40+
}
3941

40-
return ProblemPostResponse.of(problemRepository.save(problem));
42+
private ProblemCustomId createProblemCustomId(ProblemPostRequest request) {
43+
if (request.problemType().requiresPracticeTest()) {
44+
PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId());
45+
return problemAdminIdService.nextId(request.number(), practiceTestTag, request.problemType());
46+
}
47+
return problemAdminIdService.nextId(request.problemType());
4148
}
4249

50+
private PracticeTestTag getPracticeTestTag(ProblemPostRequest request) {
51+
if (request.problemType().requiresPracticeTest()) {
52+
return practiceTestRepository.findByIdElseThrow(request.practiceTestId());
53+
}
54+
return null;
55+
}
4356
}

src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.moplus.moplus_server.domain.problem.service;
22

3+
import com.moplus.moplus_server.admin.problem.dto.request.ProblemUpdateRequest;
4+
import com.moplus.moplus_server.admin.problem.dto.response.ProblemGetResponse;
35
import com.moplus.moplus_server.domain.concept.repository.ConceptTagRepository;
46
import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem;
57
import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag;
68
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
79
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemAdminIdService;
810
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId;
9-
import com.moplus.moplus_server.admin.problem.dto.request.ProblemUpdateRequest;
10-
import com.moplus.moplus_server.admin.problem.dto.response.ProblemGetResponse;
11-
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType;
1211
import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository;
1312
import com.moplus.moplus_server.domain.problem.repository.ProblemRepository;
1413
import com.moplus.moplus_server.domain.problem.service.mapper.ChildProblemMapper;
@@ -33,15 +32,8 @@ public class ProblemUpdateService {
3332
public ProblemGetResponse updateProblem(Long problemId, ProblemUpdateRequest request) {
3433
conceptTagRepository.existsByIdElseThrow(request.conceptTagIds());
3534
Problem problem = problemRepository.findByIdElseThrow(problemId);
36-
PracticeTestTag practiceTestTag = null;
37-
ProblemCustomId problemCustomId = null;
38-
if (request.problemType() != ProblemType.CREATION_PROBLEM) {
39-
practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId());
40-
problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag,
41-
request.problemType());
42-
} else {
43-
problemCustomId = problemAdminIdService.nextId(request.problemType());
44-
}
35+
PracticeTestTag practiceTestTag = getPracticeTestTag(request);
36+
ProblemCustomId problemCustomId = createProblemCustomId(request);
4537

4638
Problem inputProblem = problemMapper.from(request, problemCustomId, practiceTestTag);
4739
problem.update(inputProblem);
@@ -57,4 +49,19 @@ private List<ChildProblem> changeToChildProblems(ProblemUpdateRequest request) {
5749
.map(childProblemMapper::from)
5850
.toList();
5951
}
52+
53+
private ProblemCustomId createProblemCustomId(ProblemUpdateRequest request) {
54+
if (request.problemType().requiresPracticeTest()) {
55+
PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId());
56+
return problemAdminIdService.nextId(request.number(), practiceTestTag, request.problemType());
57+
}
58+
return problemAdminIdService.nextId(request.problemType());
59+
}
60+
61+
private PracticeTestTag getPracticeTestTag(ProblemUpdateRequest request) {
62+
if (request.problemType().requiresPracticeTest()) {
63+
return practiceTestRepository.findByIdElseThrow(request.practiceTestId());
64+
}
65+
return null;
66+
}
6067
}

0 commit comments

Comments
 (0)