Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public Problem(List<ChildProblem> 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;
}

Expand All @@ -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();
Expand Down Expand Up @@ -166,4 +166,9 @@ public String getTitle() {
public Integer getDifficulty() {
return difficulty != null ? difficulty.getDifficulty() : null;
}

public String getProblemCustomId() {
return problemCustomId.getId();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public void toggleConfirm(List<Problem> problems) {
if (this.confirmStatus == ProblemSetConfirmStatus.NOT_CONFIRMED) {
List<String> 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() +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public record ProblemSummaryResponse(
public static ProblemSummaryResponse of(Problem problem, String practiceTestName, List<String> tagNames) {

return ProblemSummaryResponse.builder()
.problemId(problem.getProblemCustomId().getId())
.problemId(problem.getProblemCustomId())
.number(problem.getNumber())
.memo(problem.getMemo())
.mainProblemImageUrl(problem.getMainProblemImageUrl())
Expand Down