Skip to content

Commit c661ad0

Browse files
authored
Merge pull request #61 from team-MoPlus/hotfix/#54
[fix/#54] 문항 생성 오류 해결
2 parents 14be218 + ed18106 commit c661ad0

File tree

9 files changed

+64
-12
lines changed

9 files changed

+64
-12
lines changed

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag;
44
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
55
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId;
6+
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType;
67
import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest;
78
import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest;
89
import java.util.ArrayList;
@@ -14,7 +15,7 @@
1415

1516
@Generated(
1617
value = "org.mapstruct.ap.MappingProcessor",
17-
date = "2025-02-18T15:29:27+0900",
18+
date = "2025-02-18T19:54:34+0900",
1819
comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)"
1920
)
2021
@Component
@@ -73,4 +74,18 @@ public Problem from(ProblemUpdateRequest request, ProblemCustomId problemCustomI
7374

7475
return problem.build();
7576
}
77+
78+
@Override
79+
public Problem from(ProblemType problemType, ProblemCustomId problemCustomId) {
80+
if ( problemType == null && problemCustomId == null ) {
81+
return null;
82+
}
83+
84+
Problem.ProblemBuilder problem = Problem.builder();
85+
86+
problem.problemType( problemType );
87+
problem.problemCustomId( problemCustomId );
88+
89+
return problem.build();
90+
}
7691
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public Problem(List<ChildProblem> childProblems, boolean isConfirmed, AnswerType
103103
this.title = new Title(title);
104104
this.problemType = problemType;
105105
this.number = number;
106-
this.practiceTestId = practiceTestTag.getId();
106+
this.practiceTestId = practiceTestTag != null ? practiceTestTag.getId() : null;
107107
this.problemCustomId = problemCustomId;
108108
}
109109

@@ -112,7 +112,7 @@ public String getAnswer() {
112112
}
113113

114114
public void update(Problem inputProblem) {
115-
this.problemCustomId = inputProblem.getProblemCustomId();
115+
this.problemCustomId = new ProblemCustomId(inputProblem.getProblemCustomId());
116116
this.practiceTestId = inputProblem.getPracticeTestId();
117117
this.number = inputProblem.getNumber();
118118
this.problemType = inputProblem.getProblemType();
@@ -166,4 +166,9 @@ public String getTitle() {
166166
public Integer getDifficulty() {
167167
return difficulty != null ? difficulty.getDifficulty() : null;
168168
}
169+
170+
public String getProblemCustomId() {
171+
return problemCustomId.getId();
172+
}
173+
169174
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,21 @@ public ProblemCustomId nextId(int number, PracticeTestTag practiceTestTag, Probl
4141

4242
return new ProblemCustomId(generatedId);
4343
}
44+
45+
public ProblemCustomId nextId(ProblemType problemType) {
46+
47+
int problemTypeCode = problemType.getCode(); // C (문제 타입)
48+
49+
String generatedId;
50+
int sequence;
51+
52+
// 중복되지 않는 ID 찾을 때까지 반복
53+
do {
54+
sequence = SEQUENCE.getAndIncrement() % 100; // 000~999 순환
55+
generatedId = String.format("%d%09d",
56+
problemTypeCode, sequence);
57+
} while (problemRepository.existsByProblemCustomId(new ProblemCustomId(generatedId))); // ID가 이미 존재하면 재생성
58+
59+
return new ProblemCustomId(generatedId);
60+
}
4461
}

src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static ProblemGetResponse of(Problem problem) {
3636

3737
return ProblemGetResponse.builder()
3838
.id(problem.getId())
39-
.problemCustomId(problem.getProblemCustomId().getId())
39+
.problemCustomId(problem.getProblemCustomId())
4040
.conceptTagIds(problem.getConceptTagIds())
4141
.practiceTestId(problem.getPracticeTestId())
4242
.number(problem.getNumber())

src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ public record ProblemPostResponse(
77
@NotNull(message = "문항 ID는 필수입니다")
88
Long id,
99
@NotNull(message = "문항 custom ID는 필수입니다")
10-
Long problemCustomId
10+
String problemCustomId
1111
) {
1212
public static ProblemPostResponse of(Problem problem) {
13-
return new ProblemPostResponse(problem.getId(), problem.getPracticeTestId());
13+
return new ProblemPostResponse(problem.getId(), problem.getProblemCustomId());
1414
}
1515
}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
55
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemAdminIdService;
66
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId;
7+
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType;
78
import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest;
89
import com.moplus.moplus_server.domain.problem.dto.response.ProblemPostResponse;
910
import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository;
@@ -24,11 +25,19 @@ public class ProblemSaveService {
2425

2526
@Transactional
2627
public ProblemPostResponse createProblem(ProblemPostRequest request) {
27-
PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId());
28-
ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag,
29-
request.problemType());
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());
33+
34+
problem = problemMapper.from(request, problemCustomId, practiceTestTag);
35+
} else {
36+
ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.problemType());
37+
problem = problemMapper.from(request.problemType(), problemCustomId);
38+
}
3039

31-
Problem problem = problemMapper.from(request, problemCustomId, practiceTestTag);
3240
return ProblemPostResponse.of(problemRepository.save(problem));
3341
}
42+
3443
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag;
44
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
55
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId;
6+
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType;
67
import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest;
78
import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest;
89
import org.mapstruct.Mapper;
@@ -23,4 +24,9 @@ public interface ProblemMapper {
2324
@Mapping(target = "practiceTestTag", source = "practiceTestTag"),
2425
})
2526
Problem from(ProblemUpdateRequest request, ProblemCustomId problemCustomId, PracticeTestTag practiceTestTag);
27+
28+
@Mappings({
29+
@Mapping(target = "problemCustomId", source = "problemCustomId")
30+
})
31+
Problem from(ProblemType problemType, ProblemCustomId problemCustomId);
2632
}

src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void toggleConfirm(List<Problem> problems) {
6969
if (this.confirmStatus == ProblemSetConfirmStatus.NOT_CONFIRMED) {
7070
List<String> invalidProblemIds = problems.stream()
7171
.filter(problem -> !problem.isValid())
72-
.map(problem -> problem.getProblemCustomId().getId())
72+
.map(Problem::getProblemCustomId)
7373
.toList();
7474
if (!invalidProblemIds.isEmpty()) {
7575
String message = ErrorCode.INVALID_CONFIRM_PROBLEM.getMessage() +

src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public record ProblemSummaryResponse(
1616
public static ProblemSummaryResponse of(Problem problem, String practiceTestName, List<String> tagNames) {
1717

1818
return ProblemSummaryResponse.builder()
19-
.problemId(problem.getProblemCustomId().getId())
19+
.problemId(problem.getProblemCustomId())
2020
.number(problem.getNumber())
2121
.memo(problem.getMemo())
2222
.mainProblemImageUrl(problem.getMainProblemImageUrl())

0 commit comments

Comments
 (0)