diff --git a/backend/src/main/java/reviewme/highlight/service/HighlightService.java b/backend/src/main/java/reviewme/highlight/service/HighlightService.java index 13e1891d2..ddcfdc45a 100644 --- a/backend/src/main/java/reviewme/highlight/service/HighlightService.java +++ b/backend/src/main/java/reviewme/highlight/service/HighlightService.java @@ -1,19 +1,13 @@ package reviewme.highlight.service; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import reviewme.highlight.domain.Highlight; -import reviewme.highlight.domain.HighlightLines; import reviewme.highlight.repository.HighlightRepository; -import reviewme.highlight.service.dto.HighlightIndexRangeRequest; -import reviewme.highlight.service.dto.HighlightRequest; -import reviewme.highlight.service.dto.HighlightedLineRequest; import reviewme.highlight.service.dto.HighlightsRequest; +import reviewme.highlight.service.mapper.HighlightMapper; import reviewme.highlight.service.validator.HighlightValidator; import reviewme.review.domain.TextAnswer; import reviewme.review.domain.TextAnswers; @@ -30,6 +24,7 @@ public class HighlightService { private final TextAnswerRepository textAnswerRepository; private final HighlightValidator highlightValidator; + private final HighlightMapper highlightMapper; @Transactional public void editHighlight(HighlightsRequest highlightsRequest, String reviewRequestCode) { @@ -37,60 +32,14 @@ public void editHighlight(HighlightsRequest highlightsRequest, String reviewRequ .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(reviewRequestCode)) .getId(); List textAnswersByIds = textAnswerRepository.findAllById(highlightsRequest.getUniqueAnswerIds()); - TextAnswers textAnswers = new TextAnswers(textAnswersByIds); highlightValidator.validate(highlightsRequest, reviewGroupId); - Map highlightLines = mapHighlightLines(highlightsRequest, textAnswers); - - deleteBeforeHighlight(highlightsRequest.questionId(), textAnswers); - saveHighlights(highlightLines); - } - - private Map mapHighlightLines(HighlightsRequest highlightsRequest, TextAnswers textAnswers) { - Map> answerLineIndexes = highlightsRequest.highlights() - .stream() - .collect(Collectors.toMap(HighlightRequest::answerId, HighlightRequest::getLineIndexes)); - - Map highlightLinesByAnswerId = new HashMap<>(); - for (HighlightRequest highlightRequest : highlightsRequest.highlights()) { - long answerId = highlightRequest.answerId(); - highlightLinesByAnswerId.put(answerId, - mapHighlightLine(highlightRequest, textAnswers.get(answerId), answerLineIndexes.get(answerId)) - ); - } - return highlightLinesByAnswerId; - } + List highlights = highlightMapper.mapToHighlights(highlightsRequest, textAnswersByIds); - private HighlightLines mapHighlightLine(HighlightRequest highlightRequest, - TextAnswer answer, List answerLineIndex) { - HighlightLines highlightLines = new HighlightLines(answer.getContent(), answerLineIndex); - for (HighlightedLineRequest lineRequest : highlightRequest.lines()) { - for (HighlightIndexRangeRequest rangeRequest : lineRequest.ranges()) { - highlightLines.addRange(lineRequest.index(), rangeRequest.startIndex(), rangeRequest.endIndex()); - } - } - return highlightLines; - } - - private void deleteBeforeHighlight(long questionId, TextAnswers textAnswers) { - List answerIds = textAnswers.getIdsByQuestionId(questionId); + TextAnswers textAnswers = new TextAnswers(textAnswersByIds); + List answerIds = textAnswers.getIdsByQuestionId(highlightsRequest.questionId()); highlightRepository.deleteAllByIds(answerIds); - } - private void saveHighlights(Map highlightLines) { - List highlights = highlightLines.entrySet() - .stream() - .flatMap(highlightLinesByAnswer -> - createHighlight(highlightLinesByAnswer.getKey(), highlightLinesByAnswer.getValue()).stream()) - .collect(Collectors.toList()); highlightRepository.saveAll(highlights); } - - private List createHighlight(long answerId, HighlightLines lines) { - return lines.getLines() - .stream() - .flatMap(line -> line.getRanges().stream() - .map(range -> new Highlight(answerId, line.getLineIndex(), range))) - .toList(); - } } diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index 41af0734b..138b36629 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -95,34 +95,26 @@ class HighlightServiceTest { long reviewGroupId = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹(reviewRequestCode, "groupAccessCode")) .getId(); - TextAnswer textAnswer1 = new TextAnswer(questionId, "text answer1"); - TextAnswer textAnswer2 = new TextAnswer(questionId, "text answer2"); - Review review = reviewRepository.save(new Review(templateId, reviewGroupId, List.of(textAnswer1, textAnswer2))); - + TextAnswer textAnswer = new TextAnswer(questionId, "text answer1"); + Review review = reviewRepository.save(new Review(templateId, reviewGroupId, List.of(textAnswer))); highlightRepository.save(new Highlight(1, 1, new HighlightRange(1, 1))); int startIndex = 2; int endIndex = 2; - int lineIndex = 0; HighlightIndexRangeRequest indexRangeRequest = new HighlightIndexRangeRequest(startIndex, endIndex); - HighlightedLineRequest lineRequest1 = new HighlightedLineRequest(lineIndex, List.of(indexRangeRequest)); - HighlightedLineRequest lineRequest2 = new HighlightedLineRequest(lineIndex, List.of(indexRangeRequest)); - HighlightRequest highlightRequest1 = new HighlightRequest(textAnswer1.getId(), List.of(lineRequest1)); - HighlightRequest highlightRequest2 = new HighlightRequest(textAnswer2.getId(), List.of(lineRequest2)); - HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, - List.of(highlightRequest1, highlightRequest2)); + HighlightedLineRequest lineRequest = new HighlightedLineRequest(0, List.of(indexRangeRequest)); + HighlightRequest highlightRequest = new HighlightRequest(textAnswer.getId(), List.of(lineRequest)); + HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, List.of(highlightRequest)); // when highlightService.editHighlight(highlightsRequest, reviewRequestCode); // then List highlights = highlightRepository.findAll(); - HighlightRange position = new HighlightRange(startIndex, endIndex); assertAll( - () -> assertThat(highlights.get(0).getAnswerId()).isEqualTo(textAnswer1.getId()), - () -> assertThat(highlights.get(1).getAnswerId()).isEqualTo(textAnswer2.getId()), - () -> assertThat(highlights.get(0).getHighlightRange()).isEqualTo(position), - () -> assertThat(highlights.get(0).getHighlightRange()).isEqualTo(position) + () -> assertThat(highlights.get(0).getAnswerId()).isEqualTo(textAnswer.getId()), + () -> assertThat(highlights.get(0).getHighlightRange()).isEqualTo( + new HighlightRange(startIndex, endIndex)) ); } }