From ed18106e7934a32dfa60895556685590f52483ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B8=EC=A4=80?= <74056843+sejoon00@users.noreply.github.com> Date: Tue, 18 Feb 2025 20:02:54 +0900 Subject: [PATCH] =?UTF-8?q?[fix/#54]=20=EB=AC=B8=ED=95=AD=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/mapper/ProblemMapperImpl.java | 17 ++++++++++++++++- .../domain/problem/domain/problem/Problem.java | 9 +++++++-- .../domain/problem/ProblemAdminIdService.java | 17 +++++++++++++++++ .../dto/response/ProblemGetResponse.java | 2 +- .../dto/response/ProblemPostResponse.java | 4 ++-- .../problem/service/ProblemSaveService.java | 17 +++++++++++++---- .../problem/service/mapper/ProblemMapper.java | 6 ++++++ .../domain/problemset/domain/ProblemSet.java | 2 +- .../dto/response/ProblemSummaryResponse.java | 2 +- 9 files changed, 64 insertions(+), 12 deletions(-) diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java index 2b75c34..ab47b56 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java @@ -3,6 +3,7 @@ import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag; import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; +import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest; import java.util.ArrayList; @@ -14,7 +15,7 @@ @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-02-18T15:29:27+0900", + date = "2025-02-18T19:54:34+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component @@ -73,4 +74,18 @@ public Problem from(ProblemUpdateRequest request, ProblemCustomId problemCustomI return problem.build(); } + + @Override + public Problem from(ProblemType problemType, ProblemCustomId problemCustomId) { + if ( problemType == null && problemCustomId == null ) { + return null; + } + + Problem.ProblemBuilder problem = Problem.builder(); + + problem.problemType( problemType ); + problem.problemCustomId( problemCustomId ); + + return problem.build(); + } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java index e245855..9ca4b79 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java @@ -103,7 +103,7 @@ public Problem(List childProblems, boolean isConfirmed, AnswerType this.title = new Title(title); this.problemType = problemType; this.number = number; - this.practiceTestId = practiceTestTag.getId(); + this.practiceTestId = practiceTestTag != null ? practiceTestTag.getId() : null; this.problemCustomId = problemCustomId; } @@ -112,7 +112,7 @@ public String getAnswer() { } public void update(Problem inputProblem) { - this.problemCustomId = inputProblem.getProblemCustomId(); + this.problemCustomId = new ProblemCustomId(inputProblem.getProblemCustomId()); this.practiceTestId = inputProblem.getPracticeTestId(); this.number = inputProblem.getNumber(); this.problemType = inputProblem.getProblemType(); @@ -166,4 +166,9 @@ public String getTitle() { public Integer getDifficulty() { return difficulty != null ? difficulty.getDifficulty() : null; } + + public String getProblemCustomId() { + return problemCustomId.getId(); + } + } \ No newline at end of file diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemAdminIdService.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemAdminIdService.java index d447346..d779579 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemAdminIdService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemAdminIdService.java @@ -41,4 +41,21 @@ public ProblemCustomId nextId(int number, PracticeTestTag practiceTestTag, Probl return new ProblemCustomId(generatedId); } + + public ProblemCustomId nextId(ProblemType problemType) { + + int problemTypeCode = problemType.getCode(); // C (문제 타입) + + String generatedId; + int sequence; + + // 중복되지 않는 ID 찾을 때까지 반복 + do { + sequence = SEQUENCE.getAndIncrement() % 100; // 000~999 순환 + generatedId = String.format("%d%09d", + problemTypeCode, sequence); + } while (problemRepository.existsByProblemCustomId(new ProblemCustomId(generatedId))); // ID가 이미 존재하면 재생성 + + return new ProblemCustomId(generatedId); + } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java index 6354dda..eadc866 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java @@ -36,7 +36,7 @@ public static ProblemGetResponse of(Problem problem) { return ProblemGetResponse.builder() .id(problem.getId()) - .problemCustomId(problem.getProblemCustomId().getId()) + .problemCustomId(problem.getProblemCustomId()) .conceptTagIds(problem.getConceptTagIds()) .practiceTestId(problem.getPracticeTestId()) .number(problem.getNumber()) diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java index 330c694..5715c5c 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java @@ -7,9 +7,9 @@ public record ProblemPostResponse( @NotNull(message = "문항 ID는 필수입니다") Long id, @NotNull(message = "문항 custom ID는 필수입니다") - Long problemCustomId + String problemCustomId ) { public static ProblemPostResponse of(Problem problem) { - return new ProblemPostResponse(problem.getId(), problem.getPracticeTestId()); + return new ProblemPostResponse(problem.getId(), problem.getProblemCustomId()); } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java index 7ceacf4..668233a 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java @@ -4,6 +4,7 @@ import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemAdminIdService; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; +import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; import com.moplus.moplus_server.domain.problem.dto.response.ProblemPostResponse; import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository; @@ -24,11 +25,19 @@ public class ProblemSaveService { @Transactional public ProblemPostResponse createProblem(ProblemPostRequest request) { - PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); - ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, - request.problemType()); + Problem problem; + if (request.problemType() != ProblemType.CREATION_PROBLEM) { + PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); + ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, + request.problemType()); + + problem = problemMapper.from(request, problemCustomId, practiceTestTag); + } else { + ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.problemType()); + problem = problemMapper.from(request.problemType(), problemCustomId); + } - Problem problem = problemMapper.from(request, problemCustomId, practiceTestTag); return ProblemPostResponse.of(problemRepository.save(problem)); } + } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapper.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapper.java index 354ab5b..0ff784c 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapper.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapper.java @@ -3,6 +3,7 @@ import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag; import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; +import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest; import org.mapstruct.Mapper; @@ -23,4 +24,9 @@ public interface ProblemMapper { @Mapping(target = "practiceTestTag", source = "practiceTestTag"), }) Problem from(ProblemUpdateRequest request, ProblemCustomId problemCustomId, PracticeTestTag practiceTestTag); + + @Mappings({ + @Mapping(target = "problemCustomId", source = "problemCustomId") + }) + Problem from(ProblemType problemType, ProblemCustomId problemCustomId); } diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java b/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java index ee5fa4f..8d339ad 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java @@ -69,7 +69,7 @@ public void toggleConfirm(List problems) { if (this.confirmStatus == ProblemSetConfirmStatus.NOT_CONFIRMED) { List invalidProblemIds = problems.stream() .filter(problem -> !problem.isValid()) - .map(problem -> problem.getProblemCustomId().getId()) + .map(Problem::getProblemCustomId) .toList(); if (!invalidProblemIds.isEmpty()) { String message = ErrorCode.INVALID_CONFIRM_PROBLEM.getMessage() + diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java b/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java index 4c28056..8317e89 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java @@ -16,7 +16,7 @@ public record ProblemSummaryResponse( public static ProblemSummaryResponse of(Problem problem, String practiceTestName, List tagNames) { return ProblemSummaryResponse.builder() - .problemId(problem.getProblemCustomId().getId()) + .problemId(problem.getProblemCustomId()) .number(problem.getNumber()) .memo(problem.getMemo()) .mainProblemImageUrl(problem.getMainProblemImageUrl())