Skip to content

Commit

Permalink
[BE] fix: 질문을 position 순서대로 내려주도록 로직 수정 (#834)
Browse files Browse the repository at this point in the history
* fix: 질문을 순서대로 내려주는 로직 수정

AS-IS: Question을 position으로 정렬한 값을 받아서 Map<Question, List<Answer>> 으로 만든 다음, mapper 에 전달했다. 이때, map 은 순서를 보장하지 않으므로 mapper 에서 position 순서대로 내려지지 않았다.
TO-BE: 쿼리에서 정렬하지 않고, mapper에서 정렬하도록 바꿔주었다.

* Revert "fix: 질문을 순서대로 내려주는 로직 수정"

This reverts commit 4ff8cc3.

* fix: 질문을 순서대로 내려주는 로직 수정

AS-IS: Question을 position으로 정렬한 값을 받아서 Map<Question, List<Answer>> 으로 만든 다음, mapper 에 전달했다. 이때, map 은 순서를 보장하지 않으므로 mapper 에서 position 순서대로 내려지지 않았다.
TO-BE: LinkedHashMap 을 사용해서 순서를 보장한다.

* refactor: 가독성 개선

* refactor: 질문 순서 보장 로직 수정

- 반환값도 LinkedHashMap 이 되도록

* fix: 컴파일 에러 해결
  • Loading branch information
nayonsoso authored Oct 16, 2024
1 parent 27683bd commit be8f2f1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package reviewme.review.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -44,21 +44,18 @@ private Section getSectionOrThrow(long sectionId, ReviewGroup reviewGroup) {
}

private Map<Question, List<Answer>> getQuestionAnswers(Section section, ReviewGroup reviewGroup) {
Map<Long, Question> questionIdQuestion = questionRepository
.findAllBySectionIdOrderByPosition(section.getId())
.stream()
.collect(Collectors.toMap(Question::getId, Function.identity()));
List<Question> questions = questionRepository.findAllBySectionIdOrderByPosition(section.getId());
Map<Long, Question> questionIdQuestion = new LinkedHashMap<>();
questions.forEach(question -> questionIdQuestion.put(question.getId(), question));

Map<Long, List<Answer>> questionIdAnswers = answerRepository
.findReceivedAnswersByQuestionIds(reviewGroup.getId(), questionIdQuestion.keySet(),
ANSWER_RESPONSE_LIMIT)
Map<Long, List<Answer>> questionIdAnswers = answerRepository.findReceivedAnswersByQuestionIds(
reviewGroup.getId(), questionIdQuestion.keySet(), ANSWER_RESPONSE_LIMIT)
.stream()
.collect(Collectors.groupingBy(Answer::getQuestionId));

return questionIdQuestion.values().stream()
.collect(Collectors.toMap(
Function.identity(),
question -> questionIdAnswers.getOrDefault(question.getId(), List.of())
));
Map<Question, List<Answer>> questionAnswers = new LinkedHashMap<>();
questionIdQuestion.values().forEach(
question -> questionAnswers.put(question, questionIdAnswers.getOrDefault(question.getId(), List.of())));
return questionAnswers;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import reviewme.question.domain.OptionItem;
import reviewme.question.domain.OptionType;
import reviewme.question.domain.Question;
import reviewme.question.domain.QuestionType;
import reviewme.question.repository.OptionGroupRepository;
import reviewme.question.repository.OptionItemRepository;
import reviewme.question.repository.QuestionRepository;
Expand Down Expand Up @@ -69,13 +70,11 @@ class ReviewGatheredLookupServiceTest {
@Autowired
private ReviewGatheredLookupService reviewLookupService;

private String reviewRequestCode;
private ReviewGroup reviewGroup;

@BeforeEach
void saveReviewGroup() {
reviewRequestCode = "1111";
reviewGroup = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "2222"));
reviewGroup = reviewGroupRepository.save(리뷰_그룹("1111", "2222"));
}

@Nested
Expand Down Expand Up @@ -401,4 +400,28 @@ class GatherOptionAnswerByQuestionTest {
// then
assertThat(actual.reviews()).hasSize(1);
}

@Test
void 질문을_position순서대로_반환한다() {
// given
Question question1 = questionRepository.save(new Question(false, QuestionType.TEXT, "질문1", null, 3));
Question question2 = questionRepository.save(new Question(false, QuestionType.TEXT, "질문2", null, 4));
Question question3 = questionRepository.save(new Question(false, QuestionType.TEXT, "질문3", null, 1));
Question question4 = questionRepository.save(new Question(false, QuestionType.TEXT, "질문4", null, 2));

Section section1 = sectionRepository.save(항상_보이는_섹션(
List.of(question1.getId(), question2.getId(), question3.getId(), question4.getId())));
Template template = templateRepository.save(템플릿(List.of(section1.getId())));

// when
ReviewsGatheredBySectionResponse actual = reviewLookupService.getReceivedReviewsBySectionId(
reviewGroup, section1.getId());

// then
assertThat(actual.reviews())
.extracting(ReviewsGatheredByQuestionResponse::question)
.extracting(SimpleQuestionResponse::name)
.containsExactly(question3.getContent(), question4.getContent(),
question1.getContent(), question2.getContent());
}
}

0 comments on commit be8f2f1

Please sign in to comment.