diff --git a/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionDocumentRepository.java b/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionDocumentRepository.java index 49a3459c..e3934cee 100644 --- a/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionDocumentRepository.java +++ b/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionDocumentRepository.java @@ -3,11 +3,9 @@ import com.biengual.core.domain.document.question.QuestionDocument; import org.bson.types.ObjectId; import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.data.mongodb.repository.Query; import java.util.List; public interface QuestionDocumentRepository extends MongoRepository { - @Query("{ '_id' : { $in: ?0 } }") List findByIdIn(List ids); } diff --git a/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionInfo.java b/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionInfo.java index 0490e59f..1a19d535 100644 --- a/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionInfo.java +++ b/user-api/src/main/java/com/biengual/userapi/question/domain/QuestionInfo.java @@ -12,18 +12,10 @@ public class QuestionInfo { @Builder public record Detail( String question, - String questionId, + String id, List examples, QuestionType type ) { - public static Detail of(QuestionDocument questionDocument) { - return QuestionInfo.Detail.builder() - .question(questionDocument.getQuestion()) - .questionId(questionDocument.getId().toString()) - .examples(questionDocument.getExamples()) - .type(questionDocument.getType()) - .build(); - } } @Builder diff --git a/user-api/src/main/java/com/biengual/userapi/question/infrastructure/QuestionReaderImpl.java b/user-api/src/main/java/com/biengual/userapi/question/infrastructure/QuestionReaderImpl.java index b8139159..69ef29f2 100644 --- a/user-api/src/main/java/com/biengual/userapi/question/infrastructure/QuestionReaderImpl.java +++ b/user-api/src/main/java/com/biengual/userapi/question/infrastructure/QuestionReaderImpl.java @@ -43,7 +43,7 @@ public List findQuestionsByContentId(Long contentId, Long u return Collections.emptyList(); } - List selectedQuestionIds = this.selectQuestionIds(incorrectQuestionIds); + List selectedQuestionIds = this.selectQuestionObjectIds(incorrectQuestionIds); return questionDocumentRepository.findByIdIn(selectedQuestionIds); } @@ -52,10 +52,13 @@ public List findQuestionsByContentId(Long contentId, Long u public List findCorrectedQuestionsByContentId(Long contentId, Long userId) { List questionIds = this.getContentDocument(contentId).getQuestionIds(); - return questionHistoryCustomRepository.findQuestionsCorrected(questionIds, userId) - .stream() - .map(questionId -> QuestionInfo.Detail.of(this.findQuestionByQuestionId(questionId))) - .toList(); + List correctQuestionObjectIds = this.getCorrectQuestionObjectIds(questionIds, userId); + + if (correctQuestionObjectIds.isEmpty()) { + return Collections.emptyList(); + } + + return questionDocumentRepository.findByIdIn(correctQuestionObjectIds); } @Override @@ -102,7 +105,7 @@ private List getIncorrectQuestionIds(List questionIds, Long user } // 정답을 맞춘 적 없는 문제들 중 최대 MAX_QUIZ_SIZE 만큼 랜덤하게 ObjectId들을 얻는 메서드 - private List selectQuestionIds(List questionDocumentIdsNotCorrected) { + private List selectQuestionObjectIds(List questionDocumentIdsNotCorrected) { Collections.shuffle(questionDocumentIdsNotCorrected); return questionDocumentIdsNotCorrected @@ -111,4 +114,15 @@ private List selectQuestionIds(List questionDocumentIdsNotCorr .map(ObjectId::new) .toList(); } + + // 정답을 맞춘 문제 ObjectId들을 얻는 메서드 + private List getCorrectQuestionObjectIds(List questionIds, Long userId) { + List questionDocumentIdsCorrected = + questionHistoryCustomRepository.findQuestionsCorrected(questionIds, userId); + + return questionDocumentIdsCorrected + .stream() + .map(ObjectId::new) + .toList(); + } } \ No newline at end of file diff --git a/user-api/src/main/java/com/biengual/userapi/question/presentation/QuestionDtoMapper.java b/user-api/src/main/java/com/biengual/userapi/question/presentation/QuestionDtoMapper.java index 726d812c..dedd2458 100644 --- a/user-api/src/main/java/com/biengual/userapi/question/presentation/QuestionDtoMapper.java +++ b/user-api/src/main/java/com/biengual/userapi/question/presentation/QuestionDtoMapper.java @@ -37,6 +37,9 @@ public interface QuestionDtoMapper { // Response <- Info QuestionResponseDto.ViewListRes ofViewListRes(QuestionInfo.DetailInfo info); + @Mapping(target = "questionId", source = "id") + QuestionResponseDto.View ofView(QuestionInfo.Detail info); + GetHintDto.Response ofGetHintRes(QuestionInfo.Hint info); // Entity <-> Info, Info <-> Info