From d7bcdb1a5c53194e16e0dc0bb352a7bd634db075 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:07:50 +0900 Subject: [PATCH 01/29] =?UTF-8?q?refactor:=20=EC=9D=B8=EB=8D=B1=EC=8A=A4?= =?UTF-8?q?=20=EB=B2=94=EC=9C=84=20=EB=8F=84=EB=A9=94=EC=9D=B8=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20lineIndex=20=EC=B1=85=EC=9E=84?= =?UTF-8?q?=EC=9D=84=20Highlight=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/highlight/domain/Highlight.java | 8 ++++++-- ...ighlightPosition.java => HighlightRange.java} | 16 ++++++---------- ...=> NegativeHighlightIndexRangeException.java} | 6 +++--- ...PositionTest.java => HighlightRangeTest.java} | 11 +++++------ .../highlight/service/HighlightServiceTest.java | 8 ++++---- 5 files changed, 24 insertions(+), 25 deletions(-) rename backend/src/main/java/reviewme/highlight/domain/{HighlightPosition.java => HighlightRange.java} (68%) rename backend/src/main/java/reviewme/highlight/domain/exception/{NegativeHighlightIndexException.java => NegativeHighlightIndexRangeException.java} (55%) rename backend/src/test/java/reviewme/highlight/domain/{HighlightPositionTest.java => HighlightRangeTest.java} (71%) diff --git a/backend/src/main/java/reviewme/highlight/domain/Highlight.java b/backend/src/main/java/reviewme/highlight/domain/Highlight.java index de6714efa..5ad9e8a32 100644 --- a/backend/src/main/java/reviewme/highlight/domain/Highlight.java +++ b/backend/src/main/java/reviewme/highlight/domain/Highlight.java @@ -26,11 +26,15 @@ public class Highlight { @Column(name = "answer_id", nullable = false) private long answerId; + @Column(name = "line_index", nullable = false) + private int lineIndex; + @Embedded - private HighlightPosition highlightPosition; + private HighlightRange highlightRange; public Highlight(long answerId, int lineIndex, int startIndex, int endIndex) { this.answerId = answerId; - this.highlightPosition = new HighlightPosition(lineIndex, startIndex, endIndex); + this.lineIndex = lineIndex; + this.highlightRange = new HighlightRange(startIndex, endIndex); } } diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightPosition.java b/backend/src/main/java/reviewme/highlight/domain/HighlightRange.java similarity index 68% rename from backend/src/main/java/reviewme/highlight/domain/HighlightPosition.java rename to backend/src/main/java/reviewme/highlight/domain/HighlightRange.java index 25463cd51..a5663da3b 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightPosition.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightRange.java @@ -7,16 +7,13 @@ import lombok.Getter; import lombok.NoArgsConstructor; import reviewme.highlight.domain.exception.HighlightStartIndexExceedEndIndexException; -import reviewme.highlight.domain.exception.NegativeHighlightIndexException; +import reviewme.highlight.domain.exception.NegativeHighlightIndexRangeException; @Embeddable @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @EqualsAndHashCode -public class HighlightPosition { - - @Column(name = "line_index", nullable = false) - private int lineIndex; +public class HighlightRange { @Column(name = "start_index", nullable = false) private int startIndex; @@ -24,21 +21,20 @@ public class HighlightPosition { @Column(name = "end_index", nullable = false) private int endIndex; - public HighlightPosition(int lineIndex, int startIndex, int endIndex) { + public HighlightRange(int startIndex, int endIndex) { validateNonNegativeIndexNumber(startIndex, endIndex); validateEndIndexOverStartIndex(startIndex, endIndex); - this.lineIndex = lineIndex; this.startIndex = startIndex; this.endIndex = endIndex; } - private void validateNonNegativeIndexNumber(long startIndex, long endIndex) { + private void validateNonNegativeIndexNumber(int startIndex, int endIndex) { if (startIndex < 0 || endIndex < 0) { - throw new NegativeHighlightIndexException(startIndex, endIndex); + throw new NegativeHighlightIndexRangeException(startIndex, endIndex); } } - private void validateEndIndexOverStartIndex(long startIndex, long endIndex) { + private void validateEndIndexOverStartIndex(int startIndex, int endIndex) { if (startIndex > endIndex) { throw new HighlightStartIndexExceedEndIndexException(startIndex, endIndex); } diff --git a/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexException.java b/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java similarity index 55% rename from backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexException.java rename to backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java index 9d2a32f00..a45983a43 100644 --- a/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexException.java +++ b/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java @@ -4,10 +4,10 @@ import reviewme.global.exception.BadRequestException; @Slf4j -public class NegativeHighlightIndexException extends BadRequestException { +public class NegativeHighlightIndexRangeException extends BadRequestException { - public NegativeHighlightIndexException(long startIndex, long endIndex) { - super("하이라이트 위치는 1 이상의 수이어야 해요."); + public NegativeHighlightIndexRangeException(int startIndex, int endIndex) { + super("하이라이트 위치는 0 이상의 수이어야 해요."); log.info("Highlight index is a negative number - startIndex: {}, endIndex: {}", startIndex, endIndex); } } diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightPositionTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightRangeTest.java similarity index 71% rename from backend/src/test/java/reviewme/highlight/domain/HighlightPositionTest.java rename to backend/src/test/java/reviewme/highlight/domain/HighlightRangeTest.java index a858f1d2a..4b4349a0b 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightPositionTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightRangeTest.java @@ -4,20 +4,19 @@ import org.junit.jupiter.api.Test; import reviewme.highlight.domain.exception.HighlightStartIndexExceedEndIndexException; -import reviewme.highlight.domain.exception.NegativeHighlightIndexException; +import reviewme.highlight.domain.exception.NegativeHighlightIndexRangeException; -class HighlightPositionTest { +class HighlightRangeTest { @Test void 하이라이트의_시작_인덱스가_종료_인덱스보다_큰_경우_예외를_발생한다() { - assertThatCode(() -> new HighlightPosition(1, 2, 1)) + assertThatCode(() -> new HighlightRange(2, 1)) .isInstanceOf(HighlightStartIndexExceedEndIndexException.class); } @Test void 하이라이트의_인덱스들이_0보다_작은_경우_예외를_발생한다() { - assertThatCode(() -> new HighlightPosition(1, -2, -1)) - .isInstanceOf(NegativeHighlightIndexException.class); - + assertThatCode(() -> new HighlightRange(-2, -1)) + .isInstanceOf(NegativeHighlightIndexRangeException.class); } } diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index a31403588..f54001d28 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -11,7 +11,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import reviewme.highlight.domain.Highlight; -import reviewme.highlight.domain.HighlightPosition; +import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; @@ -115,12 +115,12 @@ class HighlightServiceTest { // then List highlights = highlightRepository.findAll(); - HighlightPosition position = new HighlightPosition(lineIndex, startIndex, endIndex); + 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).getHighlightPosition()).isEqualTo(position), - () -> assertThat(highlights.get(0).getHighlightPosition()).isEqualTo(position) + () -> assertThat(highlights.get(0).getHighlightRange()).isEqualTo(position), + () -> assertThat(highlights.get(0).getHighlightRange()).isEqualTo(position) ); } } From d689cd6d32551f86c7c782e5a29630d2c8fe55d9 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:19:27 +0900 Subject: [PATCH 02/29] =?UTF-8?q?refactor:=20=ED=95=98=EC=9D=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=ED=95=9C=EC=A4=84=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/domain/HighlightLine.java | 34 ++++++++++++++++++ ...ghlightIndexExceedLineLengthException.java | 14 ++++++++ .../highlight/domain/HighlightLineTest.java | 36 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 backend/src/main/java/reviewme/highlight/domain/HighlightLine.java create mode 100644 backend/src/main/java/reviewme/highlight/domain/exception/HighlightIndexExceedLineLengthException.java create mode 100644 backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java new file mode 100644 index 000000000..c25807ecf --- /dev/null +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java @@ -0,0 +1,34 @@ +package reviewme.highlight.domain; + +import java.util.HashSet; +import java.util.Set; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; + +@Getter +@EqualsAndHashCode +public class HighlightLine { + + private final int lineIndex; + private final String lineContent; + private final Set ranges; + + public HighlightLine(int lineIndex, String lineContent) { + this.lineIndex = lineIndex; + this.lineContent = lineContent; + this.ranges = new HashSet<>(); + } + + public void setRange(int startIndex, int endIndex) { + validateRangeByContentLength(startIndex, endIndex); + ranges.add(new HighlightRange(startIndex, endIndex)); + } + + private void validateRangeByContentLength(int startIndex, int endIndex) { + int providedEndIndex = lineContent.length() - 1; + if (startIndex > providedEndIndex || endIndex > providedEndIndex) { + throw new HighlightIndexExceedLineLengthException(lineContent.length(), startIndex, endIndex); + } + } +} diff --git a/backend/src/main/java/reviewme/highlight/domain/exception/HighlightIndexExceedLineLengthException.java b/backend/src/main/java/reviewme/highlight/domain/exception/HighlightIndexExceedLineLengthException.java new file mode 100644 index 000000000..1c631fd83 --- /dev/null +++ b/backend/src/main/java/reviewme/highlight/domain/exception/HighlightIndexExceedLineLengthException.java @@ -0,0 +1,14 @@ +package reviewme.highlight.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.BadRequestException; + +@Slf4j +public class HighlightIndexExceedLineLengthException extends BadRequestException { + + public HighlightIndexExceedLineLengthException(int lineLength, int startIndex, int endIndex) { + super("하이라이트 위치가 텍스트의 범위를 벗어났어요."); + log.info("Highlight index exceed line length - lineLength: {}, startIndex: {}, endIndex: {}", + lineLength, startIndex, endIndex); + } +} diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java new file mode 100644 index 000000000..3beb94a6f --- /dev/null +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java @@ -0,0 +1,36 @@ +package reviewme.highlight.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; + +import java.util.Set; +import org.junit.jupiter.api.Test; +import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; + +class HighlightLineTest { + + @Test + void 하이라이트_대상_라인의_글자수보다_큰_시작_종료_인덱스_범위를_추가하려고_하면_예외를_발생한다() { + // given + String content = "12345"; + HighlightLine highlightLine = new HighlightLine(1, content); + + // when && then + assertThatCode(() -> highlightLine.setRange(content.length() - 1, content.length())) + .isInstanceOf(HighlightIndexExceedLineLengthException.class); + } + + @Test + void 하이라이트_할_라인의_시작_종료_인덱스_범위를_추가한다() { + // given + HighlightLine highlightLine = new HighlightLine(1, "12345"); + + // when + highlightLine.setRange(2, 4); + highlightLine.setRange(0, 1); + + // then + Set ranges = highlightLine.getRanges(); + assertThat(ranges).containsExactly(new HighlightRange(2, 4), new HighlightRange(0, 1)); + } +} From 588c2eed259cb08135a09aaa77d386fa9193b7f5 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:24:38 +0900 Subject: [PATCH 03/29] =?UTF-8?q?refactor:=20=ED=95=9C=20=EB=8B=B5?= =?UTF-8?q?=EB=B3=80=EC=97=90=20=ED=91=9C=EC=8B=9C=EB=90=9C=20=ED=95=98?= =?UTF-8?q?=EC=9D=B4=EB=9D=BC=EC=9D=B4=ED=8A=B8=20=EC=97=AC=EB=9F=AC?= =?UTF-8?q?=EC=A4=84=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/domain/HighlightLines.java | 47 ++++++++++ ...ightStartIndexExceedEndIndexException.java | 2 +- .../InvalidHighlightLineIndexException.java | 6 +- .../NegativeHighlightLineIndexException.java | 13 +++ .../highlight/domain/HighlightLinesTest.java | 87 +++++++++++++++++++ 5 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/java/reviewme/highlight/domain/HighlightLines.java rename backend/src/main/java/reviewme/highlight/{service => domain}/exception/InvalidHighlightLineIndexException.java (58%) create mode 100644 backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightLineIndexException.java create mode 100644 backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java new file mode 100644 index 000000000..04db1e310 --- /dev/null +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java @@ -0,0 +1,47 @@ +package reviewme.highlight.domain; + +import java.util.ArrayList; +import java.util.List; +import lombok.Getter; +import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; +import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; + +@Getter +public class HighlightLines { + + public static final String LINE_SEPARATOR = "\n"; + + private final List lines; + + public HighlightLines(String content) { + this.lines = mapLines(content); + } + + public void setRange(int lineIndex, int startIndex, int endIndex) { + validateNonNegativeLineIndexNumber(lineIndex); + validateLineIndexRange(lineIndex); + HighlightLine line = lines.get(lineIndex); + line.setRange(startIndex, endIndex); + } + + private void validateNonNegativeLineIndexNumber(int lineIndex) { + if (lineIndex < 0) { + throw new NegativeHighlightLineIndexException(lineIndex); + } + } + + private void validateLineIndexRange(int lineIndex) { + if (lineIndex >= lines.size()) { + throw new InvalidHighlightLineIndexException(lineIndex, lines.size()); + } + } + + private List mapLines(String content) { + List mappedLines = new ArrayList<>(); + String[] lineContents = content.split(LINE_SEPARATOR); + for (int i = 0; i < lineContents.length; i++) { + mappedLines.add(new HighlightLine(i , lineContents[i])); + } + return mappedLines; + } +} diff --git a/backend/src/main/java/reviewme/highlight/domain/exception/HighlightStartIndexExceedEndIndexException.java b/backend/src/main/java/reviewme/highlight/domain/exception/HighlightStartIndexExceedEndIndexException.java index 735ba06b6..38c99ac9a 100644 --- a/backend/src/main/java/reviewme/highlight/domain/exception/HighlightStartIndexExceedEndIndexException.java +++ b/backend/src/main/java/reviewme/highlight/domain/exception/HighlightStartIndexExceedEndIndexException.java @@ -6,7 +6,7 @@ @Slf4j public class HighlightStartIndexExceedEndIndexException extends BadRequestException { - public HighlightStartIndexExceedEndIndexException(long startIndex, long endIndex) { + public HighlightStartIndexExceedEndIndexException(int startIndex, int endIndex) { super("하이라이트 끝 위치는 시작 위치보다 같거나 커야 해요."); log.info("Highlight start index exceed end index - startIndex: {}, endIndex: {}", startIndex, endIndex); } diff --git a/backend/src/main/java/reviewme/highlight/service/exception/InvalidHighlightLineIndexException.java b/backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightLineIndexException.java similarity index 58% rename from backend/src/main/java/reviewme/highlight/service/exception/InvalidHighlightLineIndexException.java rename to backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightLineIndexException.java index 7271c08a3..8f06ce5b4 100644 --- a/backend/src/main/java/reviewme/highlight/service/exception/InvalidHighlightLineIndexException.java +++ b/backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightLineIndexException.java @@ -1,4 +1,4 @@ -package reviewme.highlight.service.exception; +package reviewme.highlight.domain.exception; import lombok.extern.slf4j.Slf4j; import reviewme.global.exception.BadRequestException; @@ -6,8 +6,8 @@ @Slf4j public class InvalidHighlightLineIndexException extends BadRequestException { - public InvalidHighlightLineIndexException(long submittedLineIndex, long providedMaxLineIndex) { - super("줄 번호는 %d 이하여야해요.".formatted(providedMaxLineIndex)); + public InvalidHighlightLineIndexException(int submittedLineIndex, int providedMaxLineIndex) { + super("하이라이트 위치가 답변의 라인을 벗어났어요."); log.info("Line index is out of bound - maxIndex: {}, submittedLineIndex: {}", providedMaxLineIndex, submittedLineIndex); } diff --git a/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightLineIndexException.java b/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightLineIndexException.java new file mode 100644 index 000000000..1fbd8f6c3 --- /dev/null +++ b/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightLineIndexException.java @@ -0,0 +1,13 @@ +package reviewme.highlight.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.BadRequestException; + +@Slf4j +public class NegativeHighlightLineIndexException extends BadRequestException { + + public NegativeHighlightLineIndexException(int lineIndex) { + super("하이라이트 할 라인의 위치는 0 이상의 수이어야 해요."); + log.info("Highlight index is a negative number - lineIndex: {}", lineIndex); + } +} diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java new file mode 100644 index 000000000..a900bfdee --- /dev/null +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java @@ -0,0 +1,87 @@ +package reviewme.highlight.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.junit.jupiter.api.Assertions.assertAll; + +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; +import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; +import reviewme.review.domain.Review; +import reviewme.review.domain.TextAnswer; +import reviewme.review.repository.ReviewRepository; + +@DataJpaTest +class HighlightLinesTest { + + @Autowired + ReviewRepository reviewRepository; + + @Test + void 답변_내용으로_하이라이트에_사용될_라인을_생성한다() { + // given + TextAnswer answer = new TextAnswer(1L, "123\n456\n789"); + reviewRepository.save(new Review(1L, 1L, List.of(answer))); + + // when + HighlightLines highlightLines = new HighlightLines(answer.getContent()); + + // then + assertThat(highlightLines.getLines()).containsExactly( + new HighlightLine(0, "123"), + new HighlightLine(1, "456"), + new HighlightLine(2, "789") + ); + } + + @Test + void 특정_라인에_하이라이트_시작_종료_범위를_추가한다() { + // given + TextAnswer answer = new TextAnswer(1L, "123\n456\n78910"); + reviewRepository.save(new Review(1L, 1L, List.of(answer))); + HighlightLines highlightLines = new HighlightLines(answer.getContent()); + + // when + highlightLines.setRange(0, 1, 1); + highlightLines.setRange(2, 0, 1); + highlightLines.setRange(2, 3, 4); + + // then + List lines = highlightLines.getLines(); + assertAll( + () -> assertThat(lines.get(0).getRanges()) + .containsExactly(new HighlightRange(1, 1)), + () -> assertThat(lines.get(2).getRanges()) + .containsExactly(new HighlightRange(0, 1), new HighlightRange(3, 4)) + ); + } + + @Test + void 하이라이트에_추가할_라인의_인덱스가_0보다_작을_경우_예외를_발생한다() { + // given + HighlightLines highlightLines = new HighlightLines("123\n456"); + int negativeLineIndex = -1; + + // when && then + assertThatCode(() -> highlightLines.setRange(negativeLineIndex, 0, 1)) + .isInstanceOf(NegativeHighlightLineIndexException.class); + } + + @Test + void 하이라이트에_추가할_라인의_인덱스가_대상_답변의_라인_수를_넘으면_예외를_발생한다() { + // given + String content = "123\n456"; + TextAnswer answer = new TextAnswer(1L, content); + reviewRepository.save(new Review(1L, 1L, List.of(answer))); + HighlightLines highlightLines = new HighlightLines(answer.getContent()); + int invalidLineIndex = (int) content.lines().count(); + System.out.println(invalidLineIndex); + + // when && then + assertThatCode(() -> highlightLines.setRange(invalidLineIndex, 0, 1)) + .isInstanceOf(InvalidHighlightLineIndexException.class); + } +} From 8046c1a764b894c4b884de3a55e1e6253d9f13a8 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:29:44 +0900 Subject: [PATCH 04/29] =?UTF-8?q?refactor:=20dto=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=EC=9D=98=20=EC=86=8D=EC=84=B1=EC=9D=84=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/highlight/service/dto/HighlightRequest.java | 6 ++++++ .../reviewme/highlight/service/dto/HighlightsRequest.java | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java b/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java index 673cc8e6a..f211265ce 100644 --- a/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java +++ b/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java @@ -13,4 +13,10 @@ public record HighlightRequest( @Valid @NotEmpty(message = "하이라이트 된 라인을 입력해주세요.") List lines ) { + public List getLineIndexes() { + return lines() + .stream() + .map(HighlightedLineRequest::index) + .toList(); + } } diff --git a/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java b/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java index 7b41526d9..6eb2fa997 100644 --- a/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java +++ b/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java @@ -3,6 +3,8 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; public record HighlightsRequest( @@ -12,4 +14,10 @@ public record HighlightsRequest( @Valid @NotNull(message = "하이라이트할 부분을 입력해주세요.") List highlights ) { + public Set getUniqueAnswerIds() { + return highlights() + .stream() + .map(HighlightRequest::answerId) + .collect(Collectors.toSet()); + } } From 131304e917711689fcedcabffac5a4c1788dc045 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:30:51 +0900 Subject: [PATCH 05/29] =?UTF-8?q?feat:=20=EB=8B=B5=EB=B3=80=20id=EC=97=90?= =?UTF-8?q?=20=ED=95=B4=EB=8B=B9=ED=95=98=EB=8A=94=20=ED=95=98=EC=9D=B4?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=ED=8A=B8=EB=A5=BC=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/repository/HighlightRepository.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java b/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java index c914d9750..c7e3b5adf 100644 --- a/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java +++ b/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java @@ -1,7 +1,17 @@ package reviewme.highlight.repository; +import java.util.Collection; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import reviewme.highlight.domain.Highlight; public interface HighlightRepository extends JpaRepository { + + @Modifying + @Query(""" + DELETE FROM Highlight h + WHERE h.answerId IN :answerIds + """) + void deleteAllByAnswerIds(Collection answerIds); } From bf64ea974c9628673385020b569a02e948feae5f Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:34:18 +0900 Subject: [PATCH 06/29] =?UTF-8?q?refactor:=20=EC=A4=91=EB=B3=B5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EA=B2=80=EC=A6=9D=20=EB=B0=8F=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/validator/HighlightValidator.java | 60 +++---------------- .../validator/HighlightValidatorTest.java | 52 ++++++---------- 2 files changed, 26 insertions(+), 86 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java index ad2e323b3..a5f895275 100644 --- a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java +++ b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java @@ -1,3 +1,4 @@ + package reviewme.highlight.service.validator; import java.util.List; @@ -5,57 +6,20 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import reviewme.highlight.service.dto.HighlightRequest; -import reviewme.highlight.service.dto.HighlightedLineRequest; import reviewme.highlight.service.dto.HighlightsRequest; -import reviewme.highlight.service.exception.InvalidHighlightLineIndexException; import reviewme.highlight.service.exception.SubmittedAnswerAndProvidedAnswerMismatchException; -import reviewme.question.repository.QuestionRepository; -import reviewme.review.domain.TextAnswer; import reviewme.review.repository.AnswerRepository; -import reviewme.review.repository.TextAnswerRepository; -import reviewme.review.service.exception.AnswerNotFoundByIdException; -import reviewme.review.service.exception.SubmittedQuestionAndProvidedQuestionMismatchException; -import reviewme.reviewgroup.repository.ReviewGroupRepository; +import reviewme.reviewgroup.domain.ReviewGroup; @Component @RequiredArgsConstructor public class HighlightValidator { private final AnswerRepository answerRepository; - private final TextAnswerRepository textAnswerRepository; - private final QuestionRepository questionRepository; - private final ReviewGroupRepository reviewGroupRepository; - public void validate(HighlightsRequest request, long reviewGroupId) { - validateReviewGroupContainsQuestion(request, reviewGroupId); - validateReviewGroupContainsAnswer(request, reviewGroupId); + public void validate(HighlightsRequest request, ReviewGroup reviewGroup) { + validateReviewGroupContainsAnswer(request, reviewGroup); validateQuestionContainsAnswer(request); - validateLineIndex(request); - // TODO: 중복 요청 검증 추가 예정 - } - - private void validateReviewGroupContainsQuestion(HighlightsRequest request, long reviewGroupId) { - long templateId = reviewGroupRepository.findById(reviewGroupId) - .orElseThrow() - .getTemplateId(); - Set providedQuestionIds = questionRepository.findAllQuestionIdByTemplateId(templateId); - long submittedQuestionId = request.questionId(); - - if (!providedQuestionIds.contains(submittedQuestionId)) { - throw new SubmittedQuestionAndProvidedQuestionMismatchException(submittedQuestionId, providedQuestionIds); - } - } - - private void validateReviewGroupContainsAnswer(HighlightsRequest request, long reviewGroupId) { - Set providedAnswerIds = answerRepository.findIdsByReviewGroupId(reviewGroupId); - List submittedAnswerIds = request.highlights() - .stream() - .map(HighlightRequest::answerId) - .toList(); - - if (!providedAnswerIds.containsAll(submittedAnswerIds)) { - throw new SubmittedAnswerAndProvidedAnswerMismatchException(providedAnswerIds, submittedAnswerIds); - } } private void validateQuestionContainsAnswer(HighlightsRequest request) { @@ -70,18 +34,12 @@ private void validateQuestionContainsAnswer(HighlightsRequest request) { } } - private void validateLineIndex(HighlightsRequest request) { - for (HighlightRequest highlight : request.highlights()) { - TextAnswer textAnswer = textAnswerRepository.findById(highlight.answerId()) - .orElseThrow(() -> new AnswerNotFoundByIdException(highlight.answerId())); - long providedMaxLineIndex = textAnswer.getContent().lines().count() - 1; + private void validateReviewGroupContainsAnswer(HighlightsRequest request, ReviewGroup reviewGroup) { + Set providedAnswerIds = answerRepository.findIdsByReviewGroupId(reviewGroup.getId()); + Set submittedAnswerIds = request.getUniqueAnswerIds(); - for (HighlightedLineRequest line : highlight.lines()) { - long submittedLineIndex = line.index(); - if (providedMaxLineIndex < submittedLineIndex) { - throw new InvalidHighlightLineIndexException(submittedLineIndex, providedMaxLineIndex); - } - } + if (!providedAnswerIds.containsAll(submittedAnswerIds)) { + throw new SubmittedAnswerAndProvidedAnswerMismatchException(providedAnswerIds, submittedAnswerIds); } } } diff --git a/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java b/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java index 21f1f8638..70b55f177 100644 --- a/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java +++ b/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java @@ -10,16 +10,12 @@ import reviewme.fixture.QuestionFixture; import reviewme.fixture.ReviewGroupFixture; import reviewme.highlight.service.dto.HighlightRequest; -import reviewme.highlight.service.dto.HighlightedLineRequest; import reviewme.highlight.service.dto.HighlightsRequest; -import reviewme.highlight.service.exception.InvalidHighlightLineIndexException; import reviewme.highlight.service.exception.SubmittedAnswerAndProvidedAnswerMismatchException; -import reviewme.question.domain.Question; import reviewme.question.repository.QuestionRepository; import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; -import reviewme.review.service.exception.SubmittedQuestionAndProvidedQuestionMismatchException; import reviewme.reviewgroup.domain.ReviewGroup; import reviewme.reviewgroup.repository.ReviewGroupRepository; import reviewme.support.ServiceTest; @@ -50,15 +46,22 @@ class HighlightValidatorTest { private TemplateRepository templateRepository; @Test - void 하이라이트의_질문_id가_리뷰_그룹의_템플릿에_속한_질문이_아니면_예외를_발생한다() { + void 하이라이트의_답변_id가_하이라이트의_질문_id에_해당하는_답변이_아니면_예외를_발생한다() { // given + long questionId1 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId2 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + Section section = sectionRepository.save(항상_보이는_섹션(List.of(questionId1, questionId2))); + Template template = templateRepository.save(템플릿(List.of(section.getId()))); + ReviewGroup reviewGroup = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()); - Question question = questionRepository.save(QuestionFixture.서술형_필수_질문()); - HighlightsRequest highlightsRequest = new HighlightsRequest(question.getId(), List.of()); + TextAnswer textAnswer_Q1 = new TextAnswer(questionId1, "text answer 1"); + + HighlightRequest highlightRequest = new HighlightRequest(textAnswer_Q1.getId(), List.of()); + HighlightsRequest highlightsRequest = new HighlightsRequest(questionId2, List.of(highlightRequest)); // when && then - assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroup.getId())) - .isInstanceOf(SubmittedQuestionAndProvidedQuestionMismatchException.class); + assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroup)) + .isInstanceOf(SubmittedAnswerAndProvidedAnswerMismatchException.class); } @Test @@ -81,47 +84,26 @@ class HighlightValidatorTest { HighlightsRequest highlightsRequest = new HighlightsRequest(1L, List.of(highlightRequest)); // when && then - assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroup1.getId())) + assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroup1)) .isInstanceOf(SubmittedAnswerAndProvidedAnswerMismatchException.class); } @Test - void 하이라이트의_답변_id가_하이라이트의_질문_id에_해당하는_답변이_아니면_예외를_발생한다() { + void 하이라이트의_질문_id가_리뷰_그룹의_템플릿에_속한_질문이_아니면_예외를_발생한다() { // given long questionId1 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); long questionId2 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); - Section section = sectionRepository.save(항상_보이는_섹션(List.of(questionId1, questionId2))); + Section section = sectionRepository.save(항상_보이는_섹션(List.of(questionId1))); Template template = templateRepository.save(템플릿(List.of(section.getId()))); - long reviewGroupId = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()).getId(); + ReviewGroup reviewGroup = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()); TextAnswer textAnswer_Q1 = new TextAnswer(questionId1, "text answer 1"); HighlightRequest highlightRequest = new HighlightRequest(textAnswer_Q1.getId(), List.of()); HighlightsRequest highlightsRequest = new HighlightsRequest(questionId2, List.of(highlightRequest)); // when && then - assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroupId)) + assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroup)) .isInstanceOf(SubmittedAnswerAndProvidedAnswerMismatchException.class); } - - @Test - void 답변의_줄_수보다_하이라이트의_줄_번호가_더_크면_예외를_발생한다() { - // given - long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); - long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); - long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); - - TextAnswer textAnswer = new TextAnswer(questionId, "line 1\n line 2"); - long reviewGroupId = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()).getId(); - Review review = reviewRepository.save(new Review(templateId, reviewGroupId, List.of(textAnswer))); - - long answerLineCount = textAnswer.getContent().lines().count(); - HighlightedLineRequest highlightedLineRequest = new HighlightedLineRequest((int) answerLineCount, List.of()); - HighlightRequest highlightRequest = new HighlightRequest(textAnswer.getId(), List.of(highlightedLineRequest)); - HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, List.of(highlightRequest)); - - // when & then - assertThatCode(() -> highlightValidator.validate(highlightsRequest, reviewGroupId)) - .isInstanceOf(InvalidHighlightLineIndexException.class); - } } From d68451e88300dbe114b1bf12b2e958ac064338a6 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:37:53 +0900 Subject: [PATCH 07/29] =?UTF-8?q?refactor:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/reviewme/highlight/domain/Highlight.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/main/java/reviewme/highlight/domain/Highlight.java b/backend/src/main/java/reviewme/highlight/domain/Highlight.java index 5ad9e8a32..69db7a1c8 100644 --- a/backend/src/main/java/reviewme/highlight/domain/Highlight.java +++ b/backend/src/main/java/reviewme/highlight/domain/Highlight.java @@ -37,4 +37,10 @@ public Highlight(long answerId, int lineIndex, int startIndex, int endIndex) { this.lineIndex = lineIndex; this.highlightRange = new HighlightRange(startIndex, endIndex); } + + public Highlight(long answerId, int lineIndex, HighlightRange range) { + this.answerId = answerId; + this.lineIndex = lineIndex; + this.highlightRange = range; + } } From 7e84d45189d167a9def5256f5266ee2b19f68ba5 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:38:42 +0900 Subject: [PATCH 08/29] =?UTF-8?q?refactor:=20=ED=95=98=EC=9D=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EA=B0=9D=EC=B2=B4=20=EB=A7=A4=ED=95=91?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20mapper=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/mapper/HighlightMapper.java | 70 ++++++++++++++ .../service/mapper/HighlightMapperTest.java | 92 +++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java create mode 100644 backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java new file mode 100644 index 000000000..e9c015f7e --- /dev/null +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -0,0 +1,70 @@ +package reviewme.highlight.service.mapper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import reviewme.highlight.domain.Highlight; +import reviewme.highlight.domain.HighlightLine; +import reviewme.highlight.domain.HighlightLines; +import reviewme.highlight.domain.HighlightRange; +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.review.domain.Answer; +import reviewme.review.repository.TextAnswerRepository; + +@Component +@RequiredArgsConstructor +public class HighlightMapper { + + private final TextAnswerRepository textAnswerRepository; + + public List mapToHighlights(HighlightsRequest highlightsRequest) { + Map answerHighlightLines = textAnswerRepository + .findAllById(highlightsRequest.getUniqueAnswerIds()) + .stream() + .collect(Collectors.toMap(Answer::getId, answer -> new HighlightLines(answer.getContent()))); + setIndexRanges(highlightsRequest, answerHighlightLines); + return mapLinesToHighlights(answerHighlightLines); + } + + private void setIndexRanges(HighlightsRequest highlightsRequest, Map answerHighlightLines) { + for (HighlightRequest highlightRequest : highlightsRequest.highlights()) { + HighlightLines highlightLines = answerHighlightLines.get(highlightRequest.answerId()); + setIndexRangesForAnswer(highlightRequest, highlightLines); + } + } + + private void setIndexRangesForAnswer(HighlightRequest highlightRequest, HighlightLines highlightLines) { + for (HighlightedLineRequest lineRequest : highlightRequest.lines()) { + int lineIndex = lineRequest.index(); + for (HighlightIndexRangeRequest rangeRequest : lineRequest.ranges()) { + highlightLines.setRange(lineIndex, rangeRequest.startIndex(), rangeRequest.endIndex()); + } + } + } + + private List mapLinesToHighlights(Map answerHighlightLines) { + List highlights = new ArrayList<>(); + for (Entry answerHighlightLine : answerHighlightLines.entrySet()) { + createHighlightsForAnswer(answerHighlightLine, highlights); + } + return highlights; + } + + private void createHighlightsForAnswer(Entry answerHighlightLine, List highlights) { + long answerId = answerHighlightLine.getKey(); + HighlightLines highlightLines = answerHighlightLine.getValue(); + for (HighlightLine line : highlightLines.getLines()) { + for (HighlightRange range : line.getRanges()) { + Highlight highlight = new Highlight(answerId, line.getLineIndex(), range); + highlights.add(highlight); + } + } + } +} diff --git a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java new file mode 100644 index 000000000..5ca70fd81 --- /dev/null +++ b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java @@ -0,0 +1,92 @@ +package reviewme.highlight.service.mapper; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.SectionFixture.항상_보이는_섹션; +import static reviewme.fixture.TemplateFixture.템플릿; + +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import reviewme.fixture.QuestionFixture; +import reviewme.fixture.ReviewGroupFixture; +import reviewme.highlight.domain.Highlight; +import reviewme.highlight.domain.HighlightRange; +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.question.repository.QuestionRepository; +import reviewme.review.domain.Review; +import reviewme.review.domain.TextAnswer; +import reviewme.review.repository.ReviewRepository; +import reviewme.reviewgroup.repository.ReviewGroupRepository; +import reviewme.support.ServiceTest; +import reviewme.template.repository.SectionRepository; +import reviewme.template.repository.TemplateRepository; + +@ServiceTest +class HighlightMapperTest { + + @Autowired + HighlightMapper highlightMapper; + + @Autowired + private HighlightRepository highlightRepository; + + @Autowired + private ReviewGroupRepository reviewGroupRepository; + + @Autowired + private ReviewRepository reviewRepository; + + @Autowired + private QuestionRepository questionRepository; + + @Autowired + private SectionRepository sectionRepository; + + @Autowired + private TemplateRepository templateRepository; + + @Test + void 하이라이트_요청과_기존_서술형_답변으로_하이라이트를_매핑한다() { + // given + long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); + long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); + String reviewRequestCode = "reviewRequestCode"; + 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))); + + highlightRepository.save(new Highlight(1, 1, new HighlightRange(1, 1))); + + int startIndex = 2; + int endIndex = 2; + int lineIndex = 0; + HighlightIndexRangeRequest rangeRequest = new HighlightIndexRangeRequest(startIndex, endIndex); + HighlightedLineRequest lineRequest1 = new HighlightedLineRequest(lineIndex, List.of(rangeRequest)); + HighlightedLineRequest lineRequest2 = new HighlightedLineRequest(lineIndex, List.of(rangeRequest)); + 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)); + + // when + List highlights = highlightMapper.mapToHighlights(highlightsRequest); + + // then + HighlightRange range = 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(range), + () -> assertThat(highlights.get(1).getHighlightRange()).isEqualTo(range) + ); + } +} From 0efcc4340bf3f9f0c847bda0d82bceb73a933269 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:41:22 +0900 Subject: [PATCH 09/29] =?UTF-8?q?refactor:=20=ED=95=98=EC=9D=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EC=84=9C=EB=B9=84=EC=8A=A4=EC=97=90=20map?= =?UTF-8?q?per=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=8B=A8=EC=88=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HighlightController.java | 2 +- .../highlight/service/HighlightService.java | 42 ++++---------- .../service/HighlightServiceTest.java | 58 +++++++------------ 3 files changed, 35 insertions(+), 67 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/controller/HighlightController.java b/backend/src/main/java/reviewme/highlight/controller/HighlightController.java index a76c6c298..ae65732c4 100644 --- a/backend/src/main/java/reviewme/highlight/controller/HighlightController.java +++ b/backend/src/main/java/reviewme/highlight/controller/HighlightController.java @@ -22,7 +22,7 @@ public ResponseEntity highlight( @Valid @RequestBody HighlightsRequest request, @ReviewGroupSession ReviewGroup reviewGroup ) { - highlightService.highlight(request, reviewGroup); + highlightService.editHighlight(request, reviewRequestCode); return ResponseEntity.ok().build(); } } diff --git a/backend/src/main/java/reviewme/highlight/service/HighlightService.java b/backend/src/main/java/reviewme/highlight/service/HighlightService.java index 8f05d156b..7c7c4c1c4 100644 --- a/backend/src/main/java/reviewme/highlight/service/HighlightService.java +++ b/backend/src/main/java/reviewme/highlight/service/HighlightService.java @@ -1,6 +1,5 @@ package reviewme.highlight.service; -import java.util.ArrayList; import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; @@ -8,13 +7,13 @@ import org.springframework.transaction.annotation.Transactional; import reviewme.highlight.domain.Highlight; 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.Answer; import reviewme.review.repository.AnswerRepository; +import reviewme.review.service.exception.ReviewGroupNotFoundByReviewRequestCodeException; +import reviewme.reviewgroup.domain.ReviewGroup; +import reviewme.reviewgroup.repository.ReviewGroupRepository; import reviewme.reviewgroup.domain.ReviewGroup; @Service @@ -25,36 +24,19 @@ public class HighlightService { private final AnswerRepository answerRepository; private final HighlightValidator highlightValidator; + private final HighlightMapper highlightMapper; @Transactional - public void highlight(HighlightsRequest request, ReviewGroup reviewGroup) { - long reviewGroupId = reviewGroup.getId(); - highlightValidator.validate(request, reviewGroupId); - deleteOldHighlight(request.questionId(), reviewGroupId); - saveNewHighlight(request); - } + public void editHighlight(HighlightsRequest highlightsRequest, String reviewRequestCode) { + ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(reviewRequestCode) + .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(reviewRequestCode)); - private void deleteOldHighlight(long questionId, long reviewGroupId) { - Set answersByReviewGroup = answerRepository.findAllByReviewGroupId(reviewGroupId); - List answersByReviewQuestion = answersByReviewGroup.stream() - .filter(answer -> answer.getQuestionId() == questionId) - .map(Answer::getId) - .toList(); + highlightValidator.validate(highlightsRequest, reviewGroup); + List highlights = highlightMapper.mapToHighlights(highlightsRequest); - highlightRepository.deleteAllById(answersByReviewQuestion); - } + Set allAnswerIds = answerRepository.findIdsByQuestionId(highlightsRequest.questionId()); + highlightRepository.deleteAllByAnswerIds(allAnswerIds); - private void saveNewHighlight(HighlightsRequest highlightsRequest) { - List highlights = new ArrayList<>(); - for (HighlightRequest highlight : highlightsRequest.highlights()) { - for (HighlightedLineRequest line : highlight.lines()) { - for (HighlightIndexRangeRequest range : line.ranges()) { - Highlight highLight = new Highlight(highlight.answerId(), - line.index(), range.startIndex(), range.endIndex()); - highlights.add(highLight); - } - } - } highlightRepository.saveAll(highlights); } } diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index f54001d28..41ca709bb 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -21,7 +21,6 @@ import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; -import reviewme.reviewgroup.domain.ReviewGroup; import reviewme.reviewgroup.repository.ReviewGroupRepository; import reviewme.support.ServiceTest; import reviewme.template.repository.SectionRepository; @@ -54,73 +53,60 @@ class HighlightServiceTest { @Test void 하이라이트_반영을_요청하면_리뷰_그룹과_질문에_해당하는_기존_하이라이트를_모두_삭제한다() { // given - long questionId = questionRepository.save(서술형_필수_질문()).getId(); + long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); String reviewRequestCode = "reviewRequestCode"; - ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "groupAccessCode")); - Highlight highlight1 = highlightRepository.save(new Highlight(1, 1, 1, 1)); - Highlight highlight2 = highlightRepository.save(new Highlight(2, 1, 1, 1)); + 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, reviewGroup.getId(), List.of(textAnswer1, textAnswer2))); + Review review = reviewRepository.save(new Review(templateId, reviewGroupId, List.of(textAnswer1, textAnswer2))); + Highlight highlight1 = highlightRepository.save(new Highlight(textAnswer1.getId(), 1, new HighlightRange(1, 1))); HighlightIndexRangeRequest indexRangeRequest = new HighlightIndexRangeRequest(1, 1); HighlightedLineRequest lineRequest = new HighlightedLineRequest(0, List.of(indexRangeRequest)); - HighlightRequest highlightRequest1 = new HighlightRequest(textAnswer1.getId(), List.of(lineRequest)); - HighlightRequest highlightRequest2 = new HighlightRequest(textAnswer2.getId(), List.of(lineRequest)); - HighlightsRequest highlightsRequest = new HighlightsRequest( - questionId, List.of(highlightRequest1, highlightRequest2) - ); + HighlightRequest highlightRequest1 = new HighlightRequest(textAnswer2.getId(), List.of(lineRequest)); + HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, List.of(highlightRequest1)); // when - highlightService.highlight(highlightsRequest, reviewGroup); + highlightService.editHighlight(highlightsRequest, reviewRequestCode); // then - assertAll( - () -> assertThat(highlightRepository.existsById(highlight1.getId())).isFalse(), - () -> assertThat(highlightRepository.existsById(highlight2.getId())).isFalse() - ); + assertAll(() -> assertThat(highlightRepository.existsById(highlight1.getId())).isFalse()); } @Test void 하이라이트_반영을_요청하면_새로운_하이라이트가_저장된다() { // given - long questionId = questionRepository.save(서술형_필수_질문()).getId(); + long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); String reviewRequestCode = "reviewRequestCode"; - ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "groupAccessCode")); - highlightRepository.save(new Highlight(1, 1, 1, 1)); + 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, reviewGroup.getId(), 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.highlight(highlightsRequest, reviewGroup); + 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)) ); } } From 7557ce95889a48211d47361abfc00e8a98240cdc Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:44:11 +0900 Subject: [PATCH 10/29] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HighlightDuplicatedException.java | 14 ------ .../reviewme/review/domain/TextAnswers.java | 30 ----------- .../review/repository/AnswerRepository.java | 8 --- .../review/domain/TextAnswersTest.java | 50 ------------------- 4 files changed, 102 deletions(-) delete mode 100644 backend/src/main/java/reviewme/highlight/service/exception/HighlightDuplicatedException.java delete mode 100644 backend/src/main/java/reviewme/review/domain/TextAnswers.java delete mode 100644 backend/src/test/java/reviewme/review/domain/TextAnswersTest.java diff --git a/backend/src/main/java/reviewme/highlight/service/exception/HighlightDuplicatedException.java b/backend/src/main/java/reviewme/highlight/service/exception/HighlightDuplicatedException.java deleted file mode 100644 index de999bf84..000000000 --- a/backend/src/main/java/reviewme/highlight/service/exception/HighlightDuplicatedException.java +++ /dev/null @@ -1,14 +0,0 @@ -package reviewme.highlight.service.exception; - -import lombok.extern.slf4j.Slf4j; -import reviewme.global.exception.BadRequestException; - -@Slf4j -public class HighlightDuplicatedException extends BadRequestException { - - public HighlightDuplicatedException(long answerId, long lineIndex, long startIndex, long endIndex) { - super("중복된 하이라이트는 생성할 수 없어요."); - log.info("Highlight is duplicated - answerId: {}, lineIndex: {}, startIndex: {}, endIndex: {}", - answerId, lineIndex, startIndex, endIndex); - } -} diff --git a/backend/src/main/java/reviewme/review/domain/TextAnswers.java b/backend/src/main/java/reviewme/review/domain/TextAnswers.java deleted file mode 100644 index 4ce230eb0..000000000 --- a/backend/src/main/java/reviewme/review/domain/TextAnswers.java +++ /dev/null @@ -1,30 +0,0 @@ -package reviewme.review.domain; - -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import reviewme.review.domain.exception.MissingTextAnswerForQuestionException; - -@Slf4j -public class TextAnswers { - - private final Map textAnswers; - - public TextAnswers(List textAnswers) { - this.textAnswers = textAnswers.stream() - .collect(Collectors.toMap(TextAnswer::getQuestionId, Function.identity())); - } - - public TextAnswer getAnswerByQuestionId(long questionId) { - if (!textAnswers.containsKey(questionId)) { - throw new MissingTextAnswerForQuestionException(questionId); - } - return textAnswers.get(questionId); - } - - public boolean hasAnswerByQuestionId(long questionId) { - return textAnswers.containsKey(questionId); - } -} diff --git a/backend/src/main/java/reviewme/review/repository/AnswerRepository.java b/backend/src/main/java/reviewme/review/repository/AnswerRepository.java index d296f89fe..ea793623a 100644 --- a/backend/src/main/java/reviewme/review/repository/AnswerRepository.java +++ b/backend/src/main/java/reviewme/review/repository/AnswerRepository.java @@ -28,14 +28,6 @@ public interface AnswerRepository extends JpaRepository { """) Set findIdsByReviewGroupId(long reviewGroupId); - @Query(""" - SELECT a FROM Answer a - JOIN Review r - ON a.reviewId = r.id - WHERE r.reviewGroupId = :reviewGroupId - """) - Set findAllByReviewGroupId(long reviewGroupId); - @Query(""" SELECT a.id FROM Answer a WHERE a.questionId = :questionId diff --git a/backend/src/test/java/reviewme/review/domain/TextAnswersTest.java b/backend/src/test/java/reviewme/review/domain/TextAnswersTest.java deleted file mode 100644 index 82eeb7e0b..000000000 --- a/backend/src/test/java/reviewme/review/domain/TextAnswersTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package reviewme.review.domain; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertAll; - -import java.util.List; -import org.junit.jupiter.api.Test; -import reviewme.review.domain.exception.MissingTextAnswerForQuestionException; - -class TextAnswersTest { - - @Test - void 질문에_해당하는_답변이_없으면_예외를_발생한다() { - // given - TextAnswers textAnswers = new TextAnswers(List.of(new TextAnswer(1, "답".repeat(20)))); - - // when, then - assertThatThrownBy(() -> textAnswers.getAnswerByQuestionId(2)) - .isInstanceOf(MissingTextAnswerForQuestionException.class); - } - - @Test - void 질문_ID로_서술형_답변을_반환한다() { - // given - TextAnswers textAnswers = new TextAnswers(List.of(new TextAnswer(1, "답".repeat(20)))); - - // when - TextAnswer actual = textAnswers.getAnswerByQuestionId(1); - - // then - assertThat(actual.getContent()).isEqualTo("답".repeat(20)); - } - - @Test - void 질문_ID에_해당하는_답변이_있는지_확인한다() { - // given - TextAnswers textAnswers = new TextAnswers(List.of(new TextAnswer(1, "답변"))); - - // when - boolean actual1 = textAnswers.hasAnswerByQuestionId(1); - boolean actual2 = textAnswers.hasAnswerByQuestionId(2); - - // then - assertAll( - () -> assertThat(actual1).isTrue(), - () -> assertThat(actual2).isFalse() - ); - } -} From a80795910292eceef1954c95bad485803b0e4271 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:48:01 +0900 Subject: [PATCH 11/29] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EA=B3=BC=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/reviewme/highlight/domain/HighlightLine.java | 1 + .../java/reviewme/highlight/{domain => entity}/Highlight.java | 2 +- .../reviewme/highlight/{domain => entity}/HighlightRange.java | 2 +- .../reviewme/highlight/repository/HighlightRepository.java | 2 +- .../java/reviewme/highlight/service/HighlightService.java | 2 +- .../reviewme/highlight/service/mapper/HighlightMapper.java | 4 ++-- .../java/reviewme/highlight/domain/HighlightLineTest.java | 1 + .../java/reviewme/highlight/domain/HighlightLinesTest.java | 1 + .../highlight/{domain => entity}/HighlightRangeTest.java | 2 +- .../java/reviewme/highlight/service/HighlightServiceTest.java | 4 ++++ .../highlight/service/mapper/HighlightMapperTest.java | 4 ++-- 11 files changed, 16 insertions(+), 9 deletions(-) rename backend/src/main/java/reviewme/highlight/{domain => entity}/Highlight.java (97%) rename backend/src/main/java/reviewme/highlight/{domain => entity}/HighlightRange.java (97%) rename backend/src/test/java/reviewme/highlight/{domain => entity}/HighlightRangeTest.java (95%) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java index c25807ecf..311e0bad7 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java @@ -5,6 +5,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; +import reviewme.highlight.entity.HighlightRange; @Getter @EqualsAndHashCode diff --git a/backend/src/main/java/reviewme/highlight/domain/Highlight.java b/backend/src/main/java/reviewme/highlight/entity/Highlight.java similarity index 97% rename from backend/src/main/java/reviewme/highlight/domain/Highlight.java rename to backend/src/main/java/reviewme/highlight/entity/Highlight.java index 69db7a1c8..6ba02fbdb 100644 --- a/backend/src/main/java/reviewme/highlight/domain/Highlight.java +++ b/backend/src/main/java/reviewme/highlight/entity/Highlight.java @@ -1,4 +1,4 @@ -package reviewme.highlight.domain; +package reviewme.highlight.entity; import jakarta.persistence.Column; import jakarta.persistence.Embedded; diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightRange.java b/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java similarity index 97% rename from backend/src/main/java/reviewme/highlight/domain/HighlightRange.java rename to backend/src/main/java/reviewme/highlight/entity/HighlightRange.java index a5663da3b..691ddd2dd 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightRange.java +++ b/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java @@ -1,4 +1,4 @@ -package reviewme.highlight.domain; +package reviewme.highlight.entity; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java b/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java index c7e3b5adf..e6cdb014b 100644 --- a/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java +++ b/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java @@ -4,7 +4,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; -import reviewme.highlight.domain.Highlight; +import reviewme.highlight.entity.Highlight; public interface HighlightRepository extends JpaRepository { diff --git a/backend/src/main/java/reviewme/highlight/service/HighlightService.java b/backend/src/main/java/reviewme/highlight/service/HighlightService.java index 7c7c4c1c4..e24ecc454 100644 --- a/backend/src/main/java/reviewme/highlight/service/HighlightService.java +++ b/backend/src/main/java/reviewme/highlight/service/HighlightService.java @@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import reviewme.highlight.domain.Highlight; +import reviewme.highlight.entity.Highlight; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightsRequest; import reviewme.highlight.service.mapper.HighlightMapper; diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index e9c015f7e..4af032e0f 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -7,10 +7,10 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import reviewme.highlight.domain.Highlight; +import reviewme.highlight.entity.Highlight; import reviewme.highlight.domain.HighlightLine; import reviewme.highlight.domain.HighlightLines; -import reviewme.highlight.domain.HighlightRange; +import reviewme.highlight.entity.HighlightRange; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; import reviewme.highlight.service.dto.HighlightedLineRequest; diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java index 3beb94a6f..74ef0dc5a 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java @@ -6,6 +6,7 @@ import java.util.Set; import org.junit.jupiter.api.Test; import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; +import reviewme.highlight.entity.HighlightRange; class HighlightLineTest { diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java index a900bfdee..d3e0b0136 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java @@ -10,6 +10,7 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; +import reviewme.highlight.entity.HighlightRange; import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightRangeTest.java b/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java similarity index 95% rename from backend/src/test/java/reviewme/highlight/domain/HighlightRangeTest.java rename to backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java index 4b4349a0b..71b63e451 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightRangeTest.java +++ b/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java @@ -1,4 +1,4 @@ -package reviewme.highlight.domain; +package reviewme.highlight.entity; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index 41ca709bb..6de1f0dc5 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -10,6 +10,10 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import reviewme.fixture.QuestionFixture; +import reviewme.fixture.ReviewGroupFixture; +import reviewme.highlight.entity.Highlight; +import reviewme.highlight.entity.HighlightRange; import reviewme.highlight.domain.Highlight; import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; diff --git a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java index 5ca70fd81..4351e03dd 100644 --- a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java +++ b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java @@ -10,8 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired; import reviewme.fixture.QuestionFixture; import reviewme.fixture.ReviewGroupFixture; -import reviewme.highlight.domain.Highlight; -import reviewme.highlight.domain.HighlightRange; +import reviewme.highlight.entity.Highlight; +import reviewme.highlight.entity.HighlightRange; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; From 206f712330f676f2da90dc1815e710b106dbd01c Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 09:54:15 +0900 Subject: [PATCH 12/29] =?UTF-8?q?refactor:=20dto=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=8C=80=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/service/validator/HighlightValidator.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java index a5f895275..0666ba144 100644 --- a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java +++ b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java @@ -1,11 +1,9 @@ package reviewme.highlight.service.validator; -import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import reviewme.highlight.service.dto.HighlightRequest; import reviewme.highlight.service.dto.HighlightsRequest; import reviewme.highlight.service.exception.SubmittedAnswerAndProvidedAnswerMismatchException; import reviewme.review.repository.AnswerRepository; @@ -24,10 +22,7 @@ public void validate(HighlightsRequest request, ReviewGroup reviewGroup) { private void validateQuestionContainsAnswer(HighlightsRequest request) { Set providedAnswerIds = answerRepository.findIdsByQuestionId(request.questionId()); - List submittedAnswerIds = request.highlights() - .stream() - .map(HighlightRequest::answerId) - .toList(); + Set submittedAnswerIds = request.getUniqueAnswerIds(); if (!providedAnswerIds.containsAll(submittedAnswerIds)) { throw new SubmittedAnswerAndProvidedAnswerMismatchException(providedAnswerIds, submittedAnswerIds); From 1df8f12e3e08e0c1b56206059d73cc1397ed97d4 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 10:42:33 +0900 Subject: [PATCH 13/29] =?UTF-8?q?refactor:=20=ED=95=98=EC=9D=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EB=9D=BC=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EC=B6=94=EC=83=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InvalidHighlightIndexRangeException.java | 13 +++++++++++++ .../NegativeHighlightIndexRangeException.java | 13 ------------- .../reviewme/highlight/entity/HighlightRange.java | 7 +++---- .../highlight/entity/HighlightRangeTest.java | 7 +++---- 4 files changed, 19 insertions(+), 21 deletions(-) create mode 100644 backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightIndexRangeException.java delete mode 100644 backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java diff --git a/backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightIndexRangeException.java b/backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightIndexRangeException.java new file mode 100644 index 000000000..889bcd4fb --- /dev/null +++ b/backend/src/main/java/reviewme/highlight/domain/exception/InvalidHighlightIndexRangeException.java @@ -0,0 +1,13 @@ +package reviewme.highlight.domain.exception; + +import lombok.extern.slf4j.Slf4j; +import reviewme.global.exception.BadRequestException; + +@Slf4j +public class InvalidHighlightIndexRangeException extends BadRequestException { + + public InvalidHighlightIndexRangeException(int startIndex, int endIndex) { + super("유효하지 않은 하이라이트 위치에요. 하이라이트 시작 위치: %d, 종료 위치: %d".formatted(startIndex, endIndex)); + log.info("Highlight index is a negative number - startIndex: {}, endIndex: {}", startIndex, endIndex); + } +} diff --git a/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java b/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java deleted file mode 100644 index a45983a43..000000000 --- a/backend/src/main/java/reviewme/highlight/domain/exception/NegativeHighlightIndexRangeException.java +++ /dev/null @@ -1,13 +0,0 @@ -package reviewme.highlight.domain.exception; - -import lombok.extern.slf4j.Slf4j; -import reviewme.global.exception.BadRequestException; - -@Slf4j -public class NegativeHighlightIndexRangeException extends BadRequestException { - - public NegativeHighlightIndexRangeException(int startIndex, int endIndex) { - super("하이라이트 위치는 0 이상의 수이어야 해요."); - log.info("Highlight index is a negative number - startIndex: {}, endIndex: {}", startIndex, endIndex); - } -} diff --git a/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java b/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java index 691ddd2dd..83cbc7b22 100644 --- a/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java +++ b/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java @@ -6,8 +6,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; -import reviewme.highlight.domain.exception.HighlightStartIndexExceedEndIndexException; -import reviewme.highlight.domain.exception.NegativeHighlightIndexRangeException; +import reviewme.highlight.domain.exception.InvalidHighlightIndexRangeException; @Embeddable @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -30,13 +29,13 @@ public HighlightRange(int startIndex, int endIndex) { private void validateNonNegativeIndexNumber(int startIndex, int endIndex) { if (startIndex < 0 || endIndex < 0) { - throw new NegativeHighlightIndexRangeException(startIndex, endIndex); + throw new InvalidHighlightIndexRangeException(startIndex, endIndex); } } private void validateEndIndexOverStartIndex(int startIndex, int endIndex) { if (startIndex > endIndex) { - throw new HighlightStartIndexExceedEndIndexException(startIndex, endIndex); + throw new InvalidHighlightIndexRangeException(startIndex, endIndex); } } } diff --git a/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java b/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java index 71b63e451..d9e514dea 100644 --- a/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java +++ b/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java @@ -3,20 +3,19 @@ import static org.assertj.core.api.Assertions.assertThatCode; import org.junit.jupiter.api.Test; -import reviewme.highlight.domain.exception.HighlightStartIndexExceedEndIndexException; -import reviewme.highlight.domain.exception.NegativeHighlightIndexRangeException; +import reviewme.highlight.domain.exception.InvalidHighlightIndexRangeException; class HighlightRangeTest { @Test void 하이라이트의_시작_인덱스가_종료_인덱스보다_큰_경우_예외를_발생한다() { assertThatCode(() -> new HighlightRange(2, 1)) - .isInstanceOf(HighlightStartIndexExceedEndIndexException.class); + .isInstanceOf(InvalidHighlightIndexRangeException.class); } @Test void 하이라이트의_인덱스들이_0보다_작은_경우_예외를_발생한다() { assertThatCode(() -> new HighlightRange(-2, -1)) - .isInstanceOf(NegativeHighlightIndexRangeException.class); + .isInstanceOf(InvalidHighlightIndexRangeException.class); } } From 65dd10ef8b03a6de3b0e2df9d54c816b8d611925 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 10:44:04 +0900 Subject: [PATCH 14/29] =?UTF-8?q?refactor:=20=ED=95=98=EC=9D=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EB=9D=BC=EC=9D=B8=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/highlight/domain/HighlightLines.java | 10 +++++----- .../{HighlightLine.java => HighlightedLine.java} | 4 ++-- .../highlight/service/mapper/HighlightMapper.java | 4 ++-- ...lightLineTest.java => HighlightedLineTest.java} | 14 +++++++------- ...ghtLinesTest.java => HighlightedLinesTest.java} | 10 +++++----- 5 files changed, 21 insertions(+), 21 deletions(-) rename backend/src/main/java/reviewme/highlight/domain/{HighlightLine.java => HighlightedLine.java} (91%) rename backend/src/test/java/reviewme/highlight/domain/{HighlightLineTest.java => HighlightedLineTest.java} (69%) rename backend/src/test/java/reviewme/highlight/domain/{HighlightLinesTest.java => HighlightedLinesTest.java} (93%) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java index 04db1e310..46edd93fc 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java @@ -11,7 +11,7 @@ public class HighlightLines { public static final String LINE_SEPARATOR = "\n"; - private final List lines; + private final List lines; public HighlightLines(String content) { this.lines = mapLines(content); @@ -20,7 +20,7 @@ public HighlightLines(String content) { public void setRange(int lineIndex, int startIndex, int endIndex) { validateNonNegativeLineIndexNumber(lineIndex); validateLineIndexRange(lineIndex); - HighlightLine line = lines.get(lineIndex); + HighlightedLine line = lines.get(lineIndex); line.setRange(startIndex, endIndex); } @@ -36,11 +36,11 @@ private void validateLineIndexRange(int lineIndex) { } } - private List mapLines(String content) { - List mappedLines = new ArrayList<>(); + private List mapLines(String content) { + List mappedLines = new ArrayList<>(); String[] lineContents = content.split(LINE_SEPARATOR); for (int i = 0; i < lineContents.length; i++) { - mappedLines.add(new HighlightLine(i , lineContents[i])); + mappedLines.add(new HighlightedLine(i , lineContents[i])); } return mappedLines; } diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java similarity index 91% rename from backend/src/main/java/reviewme/highlight/domain/HighlightLine.java rename to backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java index 311e0bad7..b1aea677b 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java @@ -9,13 +9,13 @@ @Getter @EqualsAndHashCode -public class HighlightLine { +public class HighlightedLine { private final int lineIndex; private final String lineContent; private final Set ranges; - public HighlightLine(int lineIndex, String lineContent) { + public HighlightedLine(int lineIndex, String lineContent) { this.lineIndex = lineIndex; this.lineContent = lineContent; this.ranges = new HashSet<>(); diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index 4af032e0f..c3415a068 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -7,8 +7,8 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import reviewme.highlight.domain.HighlightedLine; import reviewme.highlight.entity.Highlight; -import reviewme.highlight.domain.HighlightLine; import reviewme.highlight.domain.HighlightLines; import reviewme.highlight.entity.HighlightRange; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; @@ -60,7 +60,7 @@ private List mapLinesToHighlights(Map answerHig private void createHighlightsForAnswer(Entry answerHighlightLine, List highlights) { long answerId = answerHighlightLine.getKey(); HighlightLines highlightLines = answerHighlightLine.getValue(); - for (HighlightLine line : highlightLines.getLines()) { + for (HighlightedLine line : highlightLines.getLines()) { for (HighlightRange range : line.getRanges()) { Highlight highlight = new Highlight(answerId, line.getLineIndex(), range); highlights.add(highlight); diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java similarity index 69% rename from backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java rename to backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java index 74ef0dc5a..912f16e63 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightLineTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java @@ -8,30 +8,30 @@ import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; import reviewme.highlight.entity.HighlightRange; -class HighlightLineTest { +class HighlightedLineTest { @Test void 하이라이트_대상_라인의_글자수보다_큰_시작_종료_인덱스_범위를_추가하려고_하면_예외를_발생한다() { // given String content = "12345"; - HighlightLine highlightLine = new HighlightLine(1, content); + HighlightedLine highlightedLine = new HighlightedLine(1, content); // when && then - assertThatCode(() -> highlightLine.setRange(content.length() - 1, content.length())) + assertThatCode(() -> highlightedLine.setRange(content.length() - 1, content.length())) .isInstanceOf(HighlightIndexExceedLineLengthException.class); } @Test void 하이라이트_할_라인의_시작_종료_인덱스_범위를_추가한다() { // given - HighlightLine highlightLine = new HighlightLine(1, "12345"); + HighlightedLine highlightedLine = new HighlightedLine(1, "12345"); // when - highlightLine.setRange(2, 4); - highlightLine.setRange(0, 1); + highlightedLine.setRange(2, 4); + highlightedLine.setRange(0, 1); // then - Set ranges = highlightLine.getRanges(); + Set ranges = highlightedLine.getRanges(); assertThat(ranges).containsExactly(new HighlightRange(2, 4), new HighlightRange(0, 1)); } } diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java similarity index 93% rename from backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java rename to backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index d3e0b0136..26fb399f2 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -16,7 +16,7 @@ import reviewme.review.repository.ReviewRepository; @DataJpaTest -class HighlightLinesTest { +class HighlightedLinesTest { @Autowired ReviewRepository reviewRepository; @@ -32,9 +32,9 @@ class HighlightLinesTest { // then assertThat(highlightLines.getLines()).containsExactly( - new HighlightLine(0, "123"), - new HighlightLine(1, "456"), - new HighlightLine(2, "789") + new HighlightedLine(0, "123"), + new HighlightedLine(1, "456"), + new HighlightedLine(2, "789") ); } @@ -51,7 +51,7 @@ class HighlightLinesTest { highlightLines.setRange(2, 3, 4); // then - List lines = highlightLines.getLines(); + List lines = highlightLines.getLines(); assertAll( () -> assertThat(lines.get(0).getRanges()) .containsExactly(new HighlightRange(1, 1)), From 1e053d82a295d22e6b499caeaf39ff211e3f50ee Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 10:45:23 +0900 Subject: [PATCH 15/29] =?UTF-8?q?refactor:=20=ED=95=84=EB=93=9C=EB=AA=85?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/highlight/domain/HighlightedLine.java | 6 +++--- .../reviewme/highlight/service/mapper/HighlightMapper.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java index b1aea677b..8e5b77b55 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java @@ -11,12 +11,12 @@ @EqualsAndHashCode public class HighlightedLine { - private final int lineIndex; + private final int index; private final String lineContent; private final Set ranges; - public HighlightedLine(int lineIndex, String lineContent) { - this.lineIndex = lineIndex; + public HighlightedLine(int index, String lineContent) { + this.index = index; this.lineContent = lineContent; this.ranges = new HashSet<>(); } diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index c3415a068..ea399b4f0 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -62,7 +62,7 @@ private void createHighlightsForAnswer(Entry answerHighlig HighlightLines highlightLines = answerHighlightLine.getValue(); for (HighlightedLine line : highlightLines.getLines()) { for (HighlightRange range : line.getRanges()) { - Highlight highlight = new Highlight(answerId, line.getLineIndex(), range); + Highlight highlight = new Highlight(answerId, line.getIndex(), range); highlights.add(highlight); } } From 6c980996ef7dccb6a5e8867ec8d573096d209484 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 12:23:22 +0900 Subject: [PATCH 16/29] =?UTF-8?q?refactor:=20=EB=B3=80=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/domain/HighlightLines.java | 22 +++++++++---------- .../highlight/domain/HighlightedLine.java | 6 ++--- .../service/mapper/HighlightMapper.java | 10 ++++----- .../highlight/domain/HighlightedLineTest.java | 6 ++--- .../domain/HighlightedLinesTest.java | 10 ++++----- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java index 46edd93fc..92944abbe 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java @@ -17,11 +17,20 @@ public HighlightLines(String content) { this.lines = mapLines(content); } - public void setRange(int lineIndex, int startIndex, int endIndex) { + public void addRange(int lineIndex, int startIndex, int endIndex) { validateNonNegativeLineIndexNumber(lineIndex); validateLineIndexRange(lineIndex); HighlightedLine line = lines.get(lineIndex); - line.setRange(startIndex, endIndex); + line.addRange(startIndex, endIndex); + } + + private List mapLines(String content) { + List mappedLines = new ArrayList<>(); + String[] lineContents = content.split(LINE_SEPARATOR); + for (int i = 0; i < lineContents.length; i++) { + mappedLines.add(new HighlightedLine(i , lineContents[i])); + } + return mappedLines; } private void validateNonNegativeLineIndexNumber(int lineIndex) { @@ -35,13 +44,4 @@ private void validateLineIndexRange(int lineIndex) { throw new InvalidHighlightLineIndexException(lineIndex, lines.size()); } } - - private List mapLines(String content) { - List mappedLines = new ArrayList<>(); - String[] lineContents = content.split(LINE_SEPARATOR); - for (int i = 0; i < lineContents.length; i++) { - mappedLines.add(new HighlightedLine(i , lineContents[i])); - } - return mappedLines; - } } diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java index 8e5b77b55..3a3fcf1e7 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java @@ -21,14 +21,14 @@ public HighlightedLine(int index, String lineContent) { this.ranges = new HashSet<>(); } - public void setRange(int startIndex, int endIndex) { + public void addRange(int startIndex, int endIndex) { validateRangeByContentLength(startIndex, endIndex); ranges.add(new HighlightRange(startIndex, endIndex)); } private void validateRangeByContentLength(int startIndex, int endIndex) { - int providedEndIndex = lineContent.length() - 1; - if (startIndex > providedEndIndex || endIndex > providedEndIndex) { + int contentLength = lineContent.length(); + if (startIndex >= contentLength || endIndex >= contentLength) { throw new HighlightIndexExceedLineLengthException(lineContent.length(), startIndex, endIndex); } } diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index ea399b4f0..f9d45fafa 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -29,22 +29,22 @@ public List mapToHighlights(HighlightsRequest highlightsRequest) { .findAllById(highlightsRequest.getUniqueAnswerIds()) .stream() .collect(Collectors.toMap(Answer::getId, answer -> new HighlightLines(answer.getContent()))); - setIndexRanges(highlightsRequest, answerHighlightLines); + addIndexRanges(highlightsRequest, answerHighlightLines); return mapLinesToHighlights(answerHighlightLines); } - private void setIndexRanges(HighlightsRequest highlightsRequest, Map answerHighlightLines) { + private void addIndexRanges(HighlightsRequest highlightsRequest, Map answerHighlightLines) { for (HighlightRequest highlightRequest : highlightsRequest.highlights()) { HighlightLines highlightLines = answerHighlightLines.get(highlightRequest.answerId()); - setIndexRangesForAnswer(highlightRequest, highlightLines); + addIndexRangesForAnswer(highlightRequest, highlightLines); } } - private void setIndexRangesForAnswer(HighlightRequest highlightRequest, HighlightLines highlightLines) { + private void addIndexRangesForAnswer(HighlightRequest highlightRequest, HighlightLines highlightLines) { for (HighlightedLineRequest lineRequest : highlightRequest.lines()) { int lineIndex = lineRequest.index(); for (HighlightIndexRangeRequest rangeRequest : lineRequest.ranges()) { - highlightLines.setRange(lineIndex, rangeRequest.startIndex(), rangeRequest.endIndex()); + highlightLines.addRange(lineIndex, rangeRequest.startIndex(), rangeRequest.endIndex()); } } } diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java index 912f16e63..0697cc0a1 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java @@ -17,7 +17,7 @@ class HighlightedLineTest { HighlightedLine highlightedLine = new HighlightedLine(1, content); // when && then - assertThatCode(() -> highlightedLine.setRange(content.length() - 1, content.length())) + assertThatCode(() -> highlightedLine.addRange(content.length() - 1, content.length())) .isInstanceOf(HighlightIndexExceedLineLengthException.class); } @@ -27,8 +27,8 @@ class HighlightedLineTest { HighlightedLine highlightedLine = new HighlightedLine(1, "12345"); // when - highlightedLine.setRange(2, 4); - highlightedLine.setRange(0, 1); + highlightedLine.addRange(2, 4); + highlightedLine.addRange(0, 1); // then Set ranges = highlightedLine.getRanges(); diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index 26fb399f2..27b2b9f3a 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -46,9 +46,9 @@ class HighlightedLinesTest { HighlightLines highlightLines = new HighlightLines(answer.getContent()); // when - highlightLines.setRange(0, 1, 1); - highlightLines.setRange(2, 0, 1); - highlightLines.setRange(2, 3, 4); + highlightLines.addRange(0, 1, 1); + highlightLines.addRange(2, 0, 1); + highlightLines.addRange(2, 3, 4); // then List lines = highlightLines.getLines(); @@ -67,7 +67,7 @@ class HighlightedLinesTest { int negativeLineIndex = -1; // when && then - assertThatCode(() -> highlightLines.setRange(negativeLineIndex, 0, 1)) + assertThatCode(() -> highlightLines.addRange(negativeLineIndex, 0, 1)) .isInstanceOf(NegativeHighlightLineIndexException.class); } @@ -82,7 +82,7 @@ class HighlightedLinesTest { System.out.println(invalidLineIndex); // when && then - assertThatCode(() -> highlightLines.setRange(invalidLineIndex, 0, 1)) + assertThatCode(() -> highlightLines.addRange(invalidLineIndex, 0, 1)) .isInstanceOf(InvalidHighlightLineIndexException.class); } } From 30c951845f53d5b419171861f20753e64793e6c2 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 14:06:19 +0900 Subject: [PATCH 17/29] =?UTF-8?q?refactor:=20=ED=95=84=EB=93=9C=EB=AA=85?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EA=B3=B5=EB=B0=B1=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/highlight/domain/HighlightLines.java | 4 ++-- .../reviewme/highlight/domain/HighlightedLine.java | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java index 92944abbe..8e700e452 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; import lombok.Getter; -import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; +import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; @Getter public class HighlightLines { @@ -28,7 +28,7 @@ private List mapLines(String content) { List mappedLines = new ArrayList<>(); String[] lineContents = content.split(LINE_SEPARATOR); for (int i = 0; i < lineContents.length; i++) { - mappedLines.add(new HighlightedLine(i , lineContents[i])); + mappedLines.add(new HighlightedLine(i, lineContents[i])); } return mappedLines; } diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java index 3a3fcf1e7..b95d18822 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java @@ -12,12 +12,12 @@ public class HighlightedLine { private final int index; - private final String lineContent; + private final String content; private final Set ranges; - public HighlightedLine(int index, String lineContent) { + public HighlightedLine(int index, String content) { this.index = index; - this.lineContent = lineContent; + this.content = content; this.ranges = new HashSet<>(); } @@ -27,9 +27,9 @@ public void addRange(int startIndex, int endIndex) { } private void validateRangeByContentLength(int startIndex, int endIndex) { - int contentLength = lineContent.length(); + int contentLength = content.length(); if (startIndex >= contentLength || endIndex >= contentLength) { - throw new HighlightIndexExceedLineLengthException(lineContent.length(), startIndex, endIndex); + throw new HighlightIndexExceedLineLengthException(content.length(), startIndex, endIndex); } } } From 52f9e1af4e849c10d6f32be728313345d00ae4f1 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 14:06:39 +0900 Subject: [PATCH 18/29] =?UTF-8?q?refactor:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EC=B2=B4=EC=9D=B4=EB=8B=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/reviewme/highlight/entity/Highlight.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/entity/Highlight.java b/backend/src/main/java/reviewme/highlight/entity/Highlight.java index 6ba02fbdb..18a84f4f0 100644 --- a/backend/src/main/java/reviewme/highlight/entity/Highlight.java +++ b/backend/src/main/java/reviewme/highlight/entity/Highlight.java @@ -32,15 +32,13 @@ public class Highlight { @Embedded private HighlightRange highlightRange; - public Highlight(long answerId, int lineIndex, int startIndex, int endIndex) { - this.answerId = answerId; - this.lineIndex = lineIndex; - this.highlightRange = new HighlightRange(startIndex, endIndex); - } - public Highlight(long answerId, int lineIndex, HighlightRange range) { this.answerId = answerId; this.lineIndex = lineIndex; this.highlightRange = range; } + + public Highlight(long answerId, int lineIndex, int startIndex, int endIndex) { + this(answerId, lineIndex, new HighlightRange(startIndex, endIndex)); + } } From 4a515c850078008c1e5205126abe9fdd17eb60ff Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 14:13:54 +0900 Subject: [PATCH 19/29] =?UTF-8?q?refactor:=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=A9=EC=8B=9D=20=EB=B0=8F=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=20=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/highlight/service/dto/HighlightsRequest.java | 7 +++---- .../highlight/service/validator/HighlightValidator.java | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java b/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java index 6eb2fa997..1c6da49a7 100644 --- a/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java +++ b/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java @@ -3,8 +3,6 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; public record HighlightsRequest( @@ -14,10 +12,11 @@ public record HighlightsRequest( @Valid @NotNull(message = "하이라이트할 부분을 입력해주세요.") List highlights ) { - public Set getUniqueAnswerIds() { + public List getUniqueAnswerIds() { return highlights() .stream() .map(HighlightRequest::answerId) - .collect(Collectors.toSet()); + .distinct() + .toList(); } } diff --git a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java index 0666ba144..9a2214961 100644 --- a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java +++ b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java @@ -1,6 +1,7 @@ package reviewme.highlight.service.validator; +import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -22,7 +23,7 @@ public void validate(HighlightsRequest request, ReviewGroup reviewGroup) { private void validateQuestionContainsAnswer(HighlightsRequest request) { Set providedAnswerIds = answerRepository.findIdsByQuestionId(request.questionId()); - Set submittedAnswerIds = request.getUniqueAnswerIds(); + List submittedAnswerIds = request.getUniqueAnswerIds(); if (!providedAnswerIds.containsAll(submittedAnswerIds)) { throw new SubmittedAnswerAndProvidedAnswerMismatchException(providedAnswerIds, submittedAnswerIds); @@ -31,7 +32,7 @@ private void validateQuestionContainsAnswer(HighlightsRequest request) { private void validateReviewGroupContainsAnswer(HighlightsRequest request, ReviewGroup reviewGroup) { Set providedAnswerIds = answerRepository.findIdsByReviewGroupId(reviewGroup.getId()); - Set submittedAnswerIds = request.getUniqueAnswerIds(); + List submittedAnswerIds = request.getUniqueAnswerIds(); if (!providedAnswerIds.containsAll(submittedAnswerIds)) { throw new SubmittedAnswerAndProvidedAnswerMismatchException(providedAnswerIds, submittedAnswerIds); From a243d24419620583eacea3c3ce619c406be65947 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 14:40:06 +0900 Subject: [PATCH 20/29] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=ED=95=84=EC=9A=94=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EC=9D=80=20=ED=95=84=EB=93=9C=EC=9D=B8=20lineIndex=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/domain/HighlightLines.java | 15 ++++----------- .../highlight/domain/HighlightedLine.java | 4 +--- .../service/mapper/HighlightMapper.java | 16 +++++++++------- .../highlight/domain/HighlightedLineTest.java | 4 ++-- .../highlight/domain/HighlightedLinesTest.java | 8 ++++---- 5 files changed, 20 insertions(+), 27 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java index 8e700e452..4ece3a85f 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java @@ -1,6 +1,6 @@ package reviewme.highlight.domain; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import lombok.Getter; import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; @@ -14,7 +14,9 @@ public class HighlightLines { private final List lines; public HighlightLines(String content) { - this.lines = mapLines(content); + this.lines = Arrays.stream(content.split(LINE_SEPARATOR)) + .map(HighlightedLine::new) + .toList(); } public void addRange(int lineIndex, int startIndex, int endIndex) { @@ -24,15 +26,6 @@ public void addRange(int lineIndex, int startIndex, int endIndex) { line.addRange(startIndex, endIndex); } - private List mapLines(String content) { - List mappedLines = new ArrayList<>(); - String[] lineContents = content.split(LINE_SEPARATOR); - for (int i = 0; i < lineContents.length; i++) { - mappedLines.add(new HighlightedLine(i, lineContents[i])); - } - return mappedLines; - } - private void validateNonNegativeLineIndexNumber(int lineIndex) { if (lineIndex < 0) { throw new NegativeHighlightLineIndexException(lineIndex); diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java index b95d18822..c8eed2a26 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java @@ -11,12 +11,10 @@ @EqualsAndHashCode public class HighlightedLine { - private final int index; private final String content; private final Set ranges; - public HighlightedLine(int index, String content) { - this.index = index; + public HighlightedLine(String content) { this.content = content; this.ranges = new HashSet<>(); } diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index f9d45fafa..228fff7d8 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -7,9 +7,9 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import reviewme.highlight.domain.HighlightLines; import reviewme.highlight.domain.HighlightedLine; import reviewme.highlight.entity.Highlight; -import reviewme.highlight.domain.HighlightLines; import reviewme.highlight.entity.HighlightRange; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; @@ -30,7 +30,7 @@ public List mapToHighlights(HighlightsRequest highlightsRequest) { .stream() .collect(Collectors.toMap(Answer::getId, answer -> new HighlightLines(answer.getContent()))); addIndexRanges(highlightsRequest, answerHighlightLines); - return mapLinesToHighlights(answerHighlightLines); + return mapLinesToHighlights(answerHighlightLines); } private void addIndexRanges(HighlightsRequest highlightsRequest, Map answerHighlightLines) { @@ -57,12 +57,14 @@ private List mapLinesToHighlights(Map answerHig return highlights; } - private void createHighlightsForAnswer(Entry answerHighlightLine, List highlights) { + private void createHighlightsForAnswer(Entry answerHighlightLine, + List highlights) { long answerId = answerHighlightLine.getKey(); - HighlightLines highlightLines = answerHighlightLine.getValue(); - for (HighlightedLine line : highlightLines.getLines()) { - for (HighlightRange range : line.getRanges()) { - Highlight highlight = new Highlight(answerId, line.getIndex(), range); + List highlightedLines = answerHighlightLine.getValue().getLines(); + + for (int lineIndex = 0; lineIndex < highlightedLines.size(); lineIndex++) { + for (HighlightRange range : highlightedLines.get(lineIndex).getRanges()) { + Highlight highlight = new Highlight(answerId, lineIndex, range); highlights.add(highlight); } } diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java index 0697cc0a1..cdd1ac100 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java @@ -14,7 +14,7 @@ class HighlightedLineTest { void 하이라이트_대상_라인의_글자수보다_큰_시작_종료_인덱스_범위를_추가하려고_하면_예외를_발생한다() { // given String content = "12345"; - HighlightedLine highlightedLine = new HighlightedLine(1, content); + HighlightedLine highlightedLine = new HighlightedLine(content); // when && then assertThatCode(() -> highlightedLine.addRange(content.length() - 1, content.length())) @@ -24,7 +24,7 @@ class HighlightedLineTest { @Test void 하이라이트_할_라인의_시작_종료_인덱스_범위를_추가한다() { // given - HighlightedLine highlightedLine = new HighlightedLine(1, "12345"); + HighlightedLine highlightedLine = new HighlightedLine("12345"); // when highlightedLine.addRange(2, 4); diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index 27b2b9f3a..d969a6512 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -8,8 +8,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; +import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; import reviewme.highlight.entity.HighlightRange; import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; @@ -32,9 +32,9 @@ class HighlightedLinesTest { // then assertThat(highlightLines.getLines()).containsExactly( - new HighlightedLine(0, "123"), - new HighlightedLine(1, "456"), - new HighlightedLine(2, "789") + new HighlightedLine("123"), + new HighlightedLine("456"), + new HighlightedLine("789") ); } From e06028994913f10cab12f561011a312827ea7f04 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 14:49:04 +0900 Subject: [PATCH 21/29] =?UTF-8?q?refactor:=20=EC=84=B8=EC=85=98=EC=9D=84?= =?UTF-8?q?=20=ED=86=B5=ED=95=B4=20=EB=A6=AC=EB=B7=B0=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HighlightController.java | 2 +- .../highlight/service/HighlightService.java | 8 +----- .../service/HighlightServiceTest.java | 25 ++++++++----------- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/controller/HighlightController.java b/backend/src/main/java/reviewme/highlight/controller/HighlightController.java index ae65732c4..ed97f0b5e 100644 --- a/backend/src/main/java/reviewme/highlight/controller/HighlightController.java +++ b/backend/src/main/java/reviewme/highlight/controller/HighlightController.java @@ -22,7 +22,7 @@ public ResponseEntity highlight( @Valid @RequestBody HighlightsRequest request, @ReviewGroupSession ReviewGroup reviewGroup ) { - highlightService.editHighlight(request, reviewRequestCode); + highlightService.editHighlight(request, reviewGroup); return ResponseEntity.ok().build(); } } diff --git a/backend/src/main/java/reviewme/highlight/service/HighlightService.java b/backend/src/main/java/reviewme/highlight/service/HighlightService.java index e24ecc454..a39068e70 100644 --- a/backend/src/main/java/reviewme/highlight/service/HighlightService.java +++ b/backend/src/main/java/reviewme/highlight/service/HighlightService.java @@ -11,9 +11,6 @@ import reviewme.highlight.service.mapper.HighlightMapper; import reviewme.highlight.service.validator.HighlightValidator; import reviewme.review.repository.AnswerRepository; -import reviewme.review.service.exception.ReviewGroupNotFoundByReviewRequestCodeException; -import reviewme.reviewgroup.domain.ReviewGroup; -import reviewme.reviewgroup.repository.ReviewGroupRepository; import reviewme.reviewgroup.domain.ReviewGroup; @Service @@ -27,10 +24,7 @@ public class HighlightService { private final HighlightMapper highlightMapper; @Transactional - public void editHighlight(HighlightsRequest highlightsRequest, String reviewRequestCode) { - ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(reviewRequestCode) - .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(reviewRequestCode)); - + public void editHighlight(HighlightsRequest highlightsRequest, ReviewGroup reviewGroup) { highlightValidator.validate(highlightsRequest, reviewGroup); List highlights = highlightMapper.mapToHighlights(highlightsRequest); diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index 6de1f0dc5..0880f86a3 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -11,11 +11,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import reviewme.fixture.QuestionFixture; -import reviewme.fixture.ReviewGroupFixture; import reviewme.highlight.entity.Highlight; import reviewme.highlight.entity.HighlightRange; -import reviewme.highlight.domain.Highlight; -import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; @@ -25,6 +22,7 @@ import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; +import reviewme.reviewgroup.domain.ReviewGroup; import reviewme.reviewgroup.repository.ReviewGroupRepository; import reviewme.support.ServiceTest; import reviewme.template.repository.SectionRepository; @@ -57,17 +55,16 @@ class HighlightServiceTest { @Test void 하이라이트_반영을_요청하면_리뷰_그룹과_질문에_해당하는_기존_하이라이트를_모두_삭제한다() { // given - long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId = questionRepository.save(서술형_필수_질문()).getId(); long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); String reviewRequestCode = "reviewRequestCode"; - long reviewGroupId = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹(reviewRequestCode, "groupAccessCode")) - .getId(); + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "groupAccessCode")); 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))); - Highlight highlight1 = highlightRepository.save(new Highlight(textAnswer1.getId(), 1, new HighlightRange(1, 1))); + Review review = reviewRepository.save(new Review(templateId, reviewGroup.getId(), List.of(textAnswer1, textAnswer2))); + Highlight highlight = highlightRepository.save(new Highlight(textAnswer1.getId(), 1, new HighlightRange(1, 1))); HighlightIndexRangeRequest indexRangeRequest = new HighlightIndexRangeRequest(1, 1); HighlightedLineRequest lineRequest = new HighlightedLineRequest(0, List.of(indexRangeRequest)); @@ -75,10 +72,10 @@ class HighlightServiceTest { HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, List.of(highlightRequest1)); // when - highlightService.editHighlight(highlightsRequest, reviewRequestCode); + highlightService.editHighlight(highlightsRequest, reviewGroup); // then - assertAll(() -> assertThat(highlightRepository.existsById(highlight1.getId())).isFalse()); + assertAll(() -> assertThat(highlightRepository.existsById(highlight.getId())).isFalse()); } @Test @@ -88,11 +85,11 @@ class HighlightServiceTest { long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); String reviewRequestCode = "reviewRequestCode"; - long reviewGroupId = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹(reviewRequestCode, "groupAccessCode")) - .getId(); + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "groupAccessCode")); + TextAnswer textAnswer = new TextAnswer(questionId, "text answer1"); - Review review = reviewRepository.save(new Review(templateId, reviewGroupId, List.of(textAnswer))); + Review review = reviewRepository.save(new Review(templateId, reviewGroup.getId(), List.of(textAnswer))); highlightRepository.save(new Highlight(1, 1, new HighlightRange(1, 1))); int startIndex = 2; @@ -103,7 +100,7 @@ class HighlightServiceTest { HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, List.of(highlightRequest)); // when - highlightService.editHighlight(highlightsRequest, reviewRequestCode); + highlightService.editHighlight(highlightsRequest, reviewGroup); // then List highlights = highlightRepository.findAll(); From 26428e35fd106726a673e0e52898b20abface62c Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 14:53:50 +0900 Subject: [PATCH 22/29] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../highlight/service/mapper/HighlightMapper.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index 228fff7d8..53a63cf37 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -63,10 +63,15 @@ private void createHighlightsForAnswer(Entry answerHighlig List highlightedLines = answerHighlightLine.getValue().getLines(); for (int lineIndex = 0; lineIndex < highlightedLines.size(); lineIndex++) { - for (HighlightRange range : highlightedLines.get(lineIndex).getRanges()) { - Highlight highlight = new Highlight(answerId, lineIndex, range); - highlights.add(highlight); - } + createHighlightForLine(highlightedLines, lineIndex, answerId, highlights); + } + } + + private void createHighlightForLine(List highlightedLines, int lineIndex, long answerId, + List highlights) { + for (HighlightRange range : highlightedLines.get(lineIndex).getRanges()) { + Highlight highlight = new Highlight(answerId, lineIndex, range); + highlights.add(highlight); } } } From 9eac3bcf442c2c104360d2a66bff8712b9497ae4 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 15:01:07 +0900 Subject: [PATCH 23/29] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/reviewme/highlight/entity/Highlight.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/entity/Highlight.java b/backend/src/main/java/reviewme/highlight/entity/Highlight.java index 18a84f4f0..6c789200a 100644 --- a/backend/src/main/java/reviewme/highlight/entity/Highlight.java +++ b/backend/src/main/java/reviewme/highlight/entity/Highlight.java @@ -37,8 +37,4 @@ public Highlight(long answerId, int lineIndex, HighlightRange range) { this.lineIndex = lineIndex; this.highlightRange = range; } - - public Highlight(long answerId, int lineIndex, int startIndex, int endIndex) { - this(answerId, lineIndex, new HighlightRange(startIndex, endIndex)); - } } From b757b0d61c2d761f9d25f833f76c5b9deff004df Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 15:02:02 +0900 Subject: [PATCH 24/29] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...hlightLines.java => HighlightedLines.java} | 4 ++-- .../service/mapper/HighlightMapper.java | 22 +++++++++---------- .../domain/HighlightedLinesTest.java | 22 +++++++++---------- 3 files changed, 24 insertions(+), 24 deletions(-) rename backend/src/main/java/reviewme/highlight/domain/{HighlightLines.java => HighlightedLines.java} (93%) diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLines.java similarity index 93% rename from backend/src/main/java/reviewme/highlight/domain/HighlightLines.java rename to backend/src/main/java/reviewme/highlight/domain/HighlightedLines.java index 4ece3a85f..f7000ecb2 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightLines.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLines.java @@ -7,13 +7,13 @@ import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; @Getter -public class HighlightLines { +public class HighlightedLines { public static final String LINE_SEPARATOR = "\n"; private final List lines; - public HighlightLines(String content) { + public HighlightedLines(String content) { this.lines = Arrays.stream(content.split(LINE_SEPARATOR)) .map(HighlightedLine::new) .toList(); diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index 53a63cf37..cf5981e7b 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import reviewme.highlight.domain.HighlightLines; +import reviewme.highlight.domain.HighlightedLines; import reviewme.highlight.domain.HighlightedLine; import reviewme.highlight.entity.Highlight; import reviewme.highlight.entity.HighlightRange; @@ -25,39 +25,39 @@ public class HighlightMapper { private final TextAnswerRepository textAnswerRepository; public List mapToHighlights(HighlightsRequest highlightsRequest) { - Map answerHighlightLines = textAnswerRepository + Map answerHighlightLines = textAnswerRepository .findAllById(highlightsRequest.getUniqueAnswerIds()) .stream() - .collect(Collectors.toMap(Answer::getId, answer -> new HighlightLines(answer.getContent()))); + .collect(Collectors.toMap(Answer::getId, answer -> new HighlightedLines(answer.getContent()))); addIndexRanges(highlightsRequest, answerHighlightLines); return mapLinesToHighlights(answerHighlightLines); } - private void addIndexRanges(HighlightsRequest highlightsRequest, Map answerHighlightLines) { + private void addIndexRanges(HighlightsRequest highlightsRequest, Map answerHighlightLines) { for (HighlightRequest highlightRequest : highlightsRequest.highlights()) { - HighlightLines highlightLines = answerHighlightLines.get(highlightRequest.answerId()); - addIndexRangesForAnswer(highlightRequest, highlightLines); + HighlightedLines highlightedLines = answerHighlightLines.get(highlightRequest.answerId()); + addIndexRangesForAnswer(highlightRequest, highlightedLines); } } - private void addIndexRangesForAnswer(HighlightRequest highlightRequest, HighlightLines highlightLines) { + private void addIndexRangesForAnswer(HighlightRequest highlightRequest, HighlightedLines highlightedLines) { for (HighlightedLineRequest lineRequest : highlightRequest.lines()) { int lineIndex = lineRequest.index(); for (HighlightIndexRangeRequest rangeRequest : lineRequest.ranges()) { - highlightLines.addRange(lineIndex, rangeRequest.startIndex(), rangeRequest.endIndex()); + highlightedLines.addRange(lineIndex, rangeRequest.startIndex(), rangeRequest.endIndex()); } } } - private List mapLinesToHighlights(Map answerHighlightLines) { + private List mapLinesToHighlights(Map answerHighlightLines) { List highlights = new ArrayList<>(); - for (Entry answerHighlightLine : answerHighlightLines.entrySet()) { + for (Entry answerHighlightLine : answerHighlightLines.entrySet()) { createHighlightsForAnswer(answerHighlightLine, highlights); } return highlights; } - private void createHighlightsForAnswer(Entry answerHighlightLine, + private void createHighlightsForAnswer(Entry answerHighlightLine, List highlights) { long answerId = answerHighlightLine.getKey(); List highlightedLines = answerHighlightLine.getValue().getLines(); diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index d969a6512..e366923c9 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -28,10 +28,10 @@ class HighlightedLinesTest { reviewRepository.save(new Review(1L, 1L, List.of(answer))); // when - HighlightLines highlightLines = new HighlightLines(answer.getContent()); + HighlightedLines highlightedLines = new HighlightedLines(answer.getContent()); // then - assertThat(highlightLines.getLines()).containsExactly( + assertThat(highlightedLines.getLines()).containsExactly( new HighlightedLine("123"), new HighlightedLine("456"), new HighlightedLine("789") @@ -43,15 +43,15 @@ class HighlightedLinesTest { // given TextAnswer answer = new TextAnswer(1L, "123\n456\n78910"); reviewRepository.save(new Review(1L, 1L, List.of(answer))); - HighlightLines highlightLines = new HighlightLines(answer.getContent()); + HighlightedLines highlightedLines = new HighlightedLines(answer.getContent()); // when - highlightLines.addRange(0, 1, 1); - highlightLines.addRange(2, 0, 1); - highlightLines.addRange(2, 3, 4); + highlightedLines.addRange(0, 1, 1); + highlightedLines.addRange(2, 0, 1); + highlightedLines.addRange(2, 3, 4); // then - List lines = highlightLines.getLines(); + List lines = highlightedLines.getLines(); assertAll( () -> assertThat(lines.get(0).getRanges()) .containsExactly(new HighlightRange(1, 1)), @@ -63,11 +63,11 @@ class HighlightedLinesTest { @Test void 하이라이트에_추가할_라인의_인덱스가_0보다_작을_경우_예외를_발생한다() { // given - HighlightLines highlightLines = new HighlightLines("123\n456"); + HighlightedLines highlightedLines = new HighlightedLines("123\n456"); int negativeLineIndex = -1; // when && then - assertThatCode(() -> highlightLines.addRange(negativeLineIndex, 0, 1)) + assertThatCode(() -> highlightedLines.addRange(negativeLineIndex, 0, 1)) .isInstanceOf(NegativeHighlightLineIndexException.class); } @@ -77,12 +77,12 @@ class HighlightedLinesTest { String content = "123\n456"; TextAnswer answer = new TextAnswer(1L, content); reviewRepository.save(new Review(1L, 1L, List.of(answer))); - HighlightLines highlightLines = new HighlightLines(answer.getContent()); + HighlightedLines highlightedLines = new HighlightedLines(answer.getContent()); int invalidLineIndex = (int) content.lines().count(); System.out.println(invalidLineIndex); // when && then - assertThatCode(() -> highlightLines.addRange(invalidLineIndex, 0, 1)) + assertThatCode(() -> highlightedLines.addRange(invalidLineIndex, 0, 1)) .isInstanceOf(InvalidHighlightLineIndexException.class); } } From 51654c42a7785c1f3f603a140f0b63196d4576fc Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 16:03:39 +0900 Subject: [PATCH 25/29] =?UTF-8?q?refactor:=20=EC=97=94=ED=8B=B0=ED=8B=B0?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F?= =?UTF-8?q?=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EB=A1=9C=20=ED=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/highlight/{entity => domain}/Highlight.java | 2 +- .../reviewme/highlight/{entity => domain}/HighlightRange.java | 2 +- .../main/java/reviewme/highlight/domain/HighlightedLine.java | 1 - .../reviewme/highlight/repository/HighlightRepository.java | 2 +- .../java/reviewme/highlight/service/HighlightService.java | 2 +- .../reviewme/highlight/service/mapper/HighlightMapper.java | 4 ++-- .../java/reviewme/highlight/domain/HighlightedLineTest.java | 1 - .../java/reviewme/highlight/domain/HighlightedLinesTest.java | 1 - .../java/reviewme/highlight/entity/HighlightRangeTest.java | 1 + .../java/reviewme/highlight/service/HighlightServiceTest.java | 4 ++-- .../highlight/service/mapper/HighlightMapperTest.java | 4 ++-- 11 files changed, 11 insertions(+), 13 deletions(-) rename backend/src/main/java/reviewme/highlight/{entity => domain}/Highlight.java (96%) rename backend/src/main/java/reviewme/highlight/{entity => domain}/HighlightRange.java (97%) diff --git a/backend/src/main/java/reviewme/highlight/entity/Highlight.java b/backend/src/main/java/reviewme/highlight/domain/Highlight.java similarity index 96% rename from backend/src/main/java/reviewme/highlight/entity/Highlight.java rename to backend/src/main/java/reviewme/highlight/domain/Highlight.java index 6c789200a..4b30a79db 100644 --- a/backend/src/main/java/reviewme/highlight/entity/Highlight.java +++ b/backend/src/main/java/reviewme/highlight/domain/Highlight.java @@ -1,4 +1,4 @@ -package reviewme.highlight.entity; +package reviewme.highlight.domain; import jakarta.persistence.Column; import jakarta.persistence.Embedded; diff --git a/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java b/backend/src/main/java/reviewme/highlight/domain/HighlightRange.java similarity index 97% rename from backend/src/main/java/reviewme/highlight/entity/HighlightRange.java rename to backend/src/main/java/reviewme/highlight/domain/HighlightRange.java index 83cbc7b22..06fa9b5cd 100644 --- a/backend/src/main/java/reviewme/highlight/entity/HighlightRange.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightRange.java @@ -1,4 +1,4 @@ -package reviewme.highlight.entity; +package reviewme.highlight.domain; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java index c8eed2a26..06bca5576 100644 --- a/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java +++ b/backend/src/main/java/reviewme/highlight/domain/HighlightedLine.java @@ -5,7 +5,6 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; -import reviewme.highlight.entity.HighlightRange; @Getter @EqualsAndHashCode diff --git a/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java b/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java index e6cdb014b..c7e3b5adf 100644 --- a/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java +++ b/backend/src/main/java/reviewme/highlight/repository/HighlightRepository.java @@ -4,7 +4,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; -import reviewme.highlight.entity.Highlight; +import reviewme.highlight.domain.Highlight; public interface HighlightRepository extends JpaRepository { diff --git a/backend/src/main/java/reviewme/highlight/service/HighlightService.java b/backend/src/main/java/reviewme/highlight/service/HighlightService.java index a39068e70..f7e8d7a4b 100644 --- a/backend/src/main/java/reviewme/highlight/service/HighlightService.java +++ b/backend/src/main/java/reviewme/highlight/service/HighlightService.java @@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import reviewme.highlight.entity.Highlight; +import reviewme.highlight.domain.Highlight; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightsRequest; import reviewme.highlight.service.mapper.HighlightMapper; diff --git a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java index cf5981e7b..edbec9013 100644 --- a/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java +++ b/backend/src/main/java/reviewme/highlight/service/mapper/HighlightMapper.java @@ -9,8 +9,8 @@ import org.springframework.stereotype.Component; import reviewme.highlight.domain.HighlightedLines; import reviewme.highlight.domain.HighlightedLine; -import reviewme.highlight.entity.Highlight; -import reviewme.highlight.entity.HighlightRange; +import reviewme.highlight.domain.Highlight; +import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; import reviewme.highlight.service.dto.HighlightedLineRequest; diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java index cdd1ac100..200300bbf 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLineTest.java @@ -6,7 +6,6 @@ import java.util.Set; import org.junit.jupiter.api.Test; import reviewme.highlight.domain.exception.HighlightIndexExceedLineLengthException; -import reviewme.highlight.entity.HighlightRange; class HighlightedLineTest { diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index e366923c9..49c9016c8 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -10,7 +10,6 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import reviewme.highlight.domain.exception.InvalidHighlightLineIndexException; import reviewme.highlight.domain.exception.NegativeHighlightLineIndexException; -import reviewme.highlight.entity.HighlightRange; import reviewme.review.domain.Review; import reviewme.review.domain.TextAnswer; import reviewme.review.repository.ReviewRepository; diff --git a/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java b/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java index d9e514dea..84f164490 100644 --- a/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java +++ b/backend/src/test/java/reviewme/highlight/entity/HighlightRangeTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import org.junit.jupiter.api.Test; +import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.domain.exception.InvalidHighlightIndexRangeException; class HighlightRangeTest { diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index 0880f86a3..53b71669a 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -11,8 +11,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import reviewme.fixture.QuestionFixture; -import reviewme.highlight.entity.Highlight; -import reviewme.highlight.entity.HighlightRange; +import reviewme.highlight.domain.Highlight; +import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; diff --git a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java index 4351e03dd..5ca70fd81 100644 --- a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java +++ b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java @@ -10,8 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired; import reviewme.fixture.QuestionFixture; import reviewme.fixture.ReviewGroupFixture; -import reviewme.highlight.entity.Highlight; -import reviewme.highlight.entity.HighlightRange; +import reviewme.highlight.domain.Highlight; +import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; import reviewme.highlight.service.dto.HighlightIndexRangeRequest; import reviewme.highlight.service.dto.HighlightRequest; From e49734b78f35ba550183bc1f552e103c85d504e6 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 17:56:38 +0900 Subject: [PATCH 26/29] =?UTF-8?q?refactor:=20=EB=B9=88=20=ED=95=98?= =?UTF-8?q?=EC=9D=B4=EB=9D=BC=EC=9D=B4=ED=8A=B8=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EC=9D=B4=20=EC=99=94=EC=9D=84=20=EB=95=8C=20=EC=95=84=EB=AC=B4?= =?UTF-8?q?=EA=B2=83=EB=8F=84=20=EC=A0=80=EC=9E=A5=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=EA=B2=83=20=EA=B2=80=EC=A6=9D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/HighlightServiceTest.java | 22 +++++++++++++++++++ .../service/mapper/HighlightMapperTest.java | 12 ++++++++++ 2 files changed, 34 insertions(+) diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index 53b71669a..e7744980f 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -110,4 +110,26 @@ class HighlightServiceTest { new HighlightRange(startIndex, endIndex)) ); } + + @Test + void 하이라이트_할_내용이_없는_요청이_오면_기존에_있던_내용을_삭제하고_아무것도_저장하지_않는다() { + // given + long questionId = questionRepository.save(서술형_필수_질문()).getId(); + long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); + long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); + String reviewRequestCode = "reviewRequestCode"; + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "groupAccessCode")); + + TextAnswer textAnswer = new TextAnswer(questionId, "text answer1"); + Review review = reviewRepository.save(new Review(templateId, reviewGroup.getId(), List.of(textAnswer))); + Highlight highlight = highlightRepository.save(new Highlight(textAnswer.getId(), 1, new HighlightRange(1, 1))); + + HighlightsRequest highlightsRequest = new HighlightsRequest(questionId, List.of()); + + // when + highlightService.editHighlight(highlightsRequest, reviewGroup); + + // then + assertAll(() -> assertThat(highlightRepository.existsById(highlight.getId())).isFalse()); + } } diff --git a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java index 5ca70fd81..c8d10bae0 100644 --- a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java +++ b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java @@ -89,4 +89,16 @@ class HighlightMapperTest { () -> assertThat(highlights.get(1).getHighlightRange()).isEqualTo(range) ); } + + @Test + void 하이라이트_할_내용이_없는_요청이_오면_매핑_결과_빈_리스트를_반환한다() { + // given + HighlightsRequest highlightsRequest = new HighlightsRequest(1L, List.of()); + + // when + List highlights = highlightMapper.mapToHighlights(highlightsRequest); + + // then + assertThat(highlights).isEmpty(); + } } From d9a222861eadf44e072d3637e3d9e9042ab11459 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 18:07:15 +0900 Subject: [PATCH 27/29] =?UTF-8?q?refactor:=20=EB=B3=80=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EC=A0=95=EB=A0=AC,=20=EA=B0=9C=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/highlight/service/HighlightService.java | 4 ++-- .../reviewme/highlight/service/dto/HighlightsRequest.java | 1 + .../highlight/service/validator/HighlightValidator.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/service/HighlightService.java b/backend/src/main/java/reviewme/highlight/service/HighlightService.java index f7e8d7a4b..7cb9f9c70 100644 --- a/backend/src/main/java/reviewme/highlight/service/HighlightService.java +++ b/backend/src/main/java/reviewme/highlight/service/HighlightService.java @@ -28,8 +28,8 @@ public void editHighlight(HighlightsRequest highlightsRequest, ReviewGroup revie highlightValidator.validate(highlightsRequest, reviewGroup); List highlights = highlightMapper.mapToHighlights(highlightsRequest); - Set allAnswerIds = answerRepository.findIdsByQuestionId(highlightsRequest.questionId()); - highlightRepository.deleteAllByAnswerIds(allAnswerIds); + Set answerIds = answerRepository.findIdsByQuestionId(highlightsRequest.questionId()); + highlightRepository.deleteAllByAnswerIds(answerIds); highlightRepository.saveAll(highlights); } diff --git a/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java b/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java index 1c6da49a7..b8f26cba6 100644 --- a/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java +++ b/backend/src/main/java/reviewme/highlight/service/dto/HighlightsRequest.java @@ -12,6 +12,7 @@ public record HighlightsRequest( @Valid @NotNull(message = "하이라이트할 부분을 입력해주세요.") List highlights ) { + public List getUniqueAnswerIds() { return highlights() .stream() diff --git a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java index 9a2214961..e05f0f9df 100644 --- a/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java +++ b/backend/src/main/java/reviewme/highlight/service/validator/HighlightValidator.java @@ -17,8 +17,8 @@ public class HighlightValidator { private final AnswerRepository answerRepository; public void validate(HighlightsRequest request, ReviewGroup reviewGroup) { - validateReviewGroupContainsAnswer(request, reviewGroup); validateQuestionContainsAnswer(request); + validateReviewGroupContainsAnswer(request, reviewGroup); } private void validateQuestionContainsAnswer(HighlightsRequest request) { From 7dcc5e2b6bd5a6e36fa4f3ca76731c69c21a78cc Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 18:11:48 +0900 Subject: [PATCH 28/29] =?UTF-8?q?refactor:=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EC=A0=9C=EC=96=B4=EC=9E=90=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?static=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/HighlightedLinesTest.java | 2 +- .../service/HighlightServiceTest.java | 3 +-- .../service/mapper/HighlightMapperTest.java | 10 ++++----- .../validator/HighlightValidatorTest.java | 22 +++++++++---------- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java index 49c9016c8..53d81c209 100644 --- a/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java +++ b/backend/src/test/java/reviewme/highlight/domain/HighlightedLinesTest.java @@ -18,7 +18,7 @@ class HighlightedLinesTest { @Autowired - ReviewRepository reviewRepository; + private ReviewRepository reviewRepository; @Test void 답변_내용으로_하이라이트에_사용될_라인을_생성한다() { diff --git a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java index e7744980f..32eed36b8 100644 --- a/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java +++ b/backend/src/test/java/reviewme/highlight/service/HighlightServiceTest.java @@ -10,7 +10,6 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import reviewme.fixture.QuestionFixture; import reviewme.highlight.domain.Highlight; import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; @@ -81,7 +80,7 @@ class HighlightServiceTest { @Test void 하이라이트_반영을_요청하면_새로운_하이라이트가_저장된다() { // given - long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId = questionRepository.save(서술형_필수_질문()).getId(); long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); String reviewRequestCode = "reviewRequestCode"; diff --git a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java index c8d10bae0..14a6639f9 100644 --- a/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java +++ b/backend/src/test/java/reviewme/highlight/service/mapper/HighlightMapperTest.java @@ -2,14 +2,14 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; import static reviewme.fixture.TemplateFixture.템플릿; import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import reviewme.fixture.QuestionFixture; -import reviewme.fixture.ReviewGroupFixture; import reviewme.highlight.domain.Highlight; import reviewme.highlight.domain.HighlightRange; import reviewme.highlight.repository.HighlightRepository; @@ -30,7 +30,7 @@ class HighlightMapperTest { @Autowired - HighlightMapper highlightMapper; + private HighlightMapper highlightMapper; @Autowired private HighlightRepository highlightRepository; @@ -53,11 +53,11 @@ class HighlightMapperTest { @Test void 하이라이트_요청과_기존_서술형_답변으로_하이라이트를_매핑한다() { // given - long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId = questionRepository.save(서술형_필수_질문()).getId(); long sectionId = sectionRepository.save(항상_보이는_섹션(List.of(questionId))).getId(); long templateId = templateRepository.save(템플릿(List.of(sectionId))).getId(); String reviewRequestCode = "reviewRequestCode"; - long reviewGroupId = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹(reviewRequestCode, "groupAccessCode")) + long reviewGroupId = reviewGroupRepository.save(리뷰_그룹(reviewRequestCode, "groupAccessCode")) .getId(); TextAnswer textAnswer1 = new TextAnswer(questionId, "text answer1"); diff --git a/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java b/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java index 70b55f177..84bf793d2 100644 --- a/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java +++ b/backend/src/test/java/reviewme/highlight/service/validator/HighlightValidatorTest.java @@ -1,14 +1,14 @@ package reviewme.highlight.service.validator; import static org.assertj.core.api.Assertions.assertThatCode; +import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; import static reviewme.fixture.TemplateFixture.템플릿; import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import reviewme.fixture.QuestionFixture; -import reviewme.fixture.ReviewGroupFixture; import reviewme.highlight.service.dto.HighlightRequest; import reviewme.highlight.service.dto.HighlightsRequest; import reviewme.highlight.service.exception.SubmittedAnswerAndProvidedAnswerMismatchException; @@ -48,12 +48,12 @@ class HighlightValidatorTest { @Test void 하이라이트의_답변_id가_하이라이트의_질문_id에_해당하는_답변이_아니면_예외를_발생한다() { // given - long questionId1 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); - long questionId2 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId1 = questionRepository.save(서술형_필수_질문()).getId(); + long questionId2 = questionRepository.save(서술형_필수_질문()).getId(); Section section = sectionRepository.save(항상_보이는_섹션(List.of(questionId1, questionId2))); Template template = templateRepository.save(템플릿(List.of(section.getId()))); - ReviewGroup reviewGroup = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()); + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); TextAnswer textAnswer_Q1 = new TextAnswer(questionId1, "text answer 1"); HighlightRequest highlightRequest = new HighlightRequest(textAnswer_Q1.getId(), List.of()); @@ -67,12 +67,12 @@ class HighlightValidatorTest { @Test void 하이라이트의_답변_id가_리뷰_그룹에_달린_답변이_아니면_예외를_발생한다() { // given - long questionId = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId = questionRepository.save(서술형_필수_질문()).getId(); Section section = sectionRepository.save(항상_보이는_섹션(List.of(questionId))); Template template = templateRepository.save(템플릿(List.of(section.getId()))); - ReviewGroup reviewGroup1 = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()); - ReviewGroup reviewGroup2 = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()); + ReviewGroup reviewGroup1 = reviewGroupRepository.save(리뷰_그룹()); + ReviewGroup reviewGroup2 = reviewGroupRepository.save(리뷰_그룹()); TextAnswer textAnswer1 = new TextAnswer(questionId, "text answer1"); TextAnswer textAnswer2 = new TextAnswer(questionId, "text answer2"); reviewRepository.saveAll(List.of( @@ -91,12 +91,12 @@ class HighlightValidatorTest { @Test void 하이라이트의_질문_id가_리뷰_그룹의_템플릿에_속한_질문이_아니면_예외를_발생한다() { // given - long questionId1 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); - long questionId2 = questionRepository.save(QuestionFixture.서술형_필수_질문()).getId(); + long questionId1 = questionRepository.save(서술형_필수_질문()).getId(); + long questionId2 = questionRepository.save(서술형_필수_질문()).getId(); Section section = sectionRepository.save(항상_보이는_섹션(List.of(questionId1))); Template template = templateRepository.save(템플릿(List.of(section.getId()))); - ReviewGroup reviewGroup = reviewGroupRepository.save(ReviewGroupFixture.리뷰_그룹()); + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); TextAnswer textAnswer_Q1 = new TextAnswer(questionId1, "text answer 1"); HighlightRequest highlightRequest = new HighlightRequest(textAnswer_Q1.getId(), List.of()); From 80479d5a152c219b73fe84ae1a9f13ece0f950c6 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Tue, 15 Oct 2024 18:13:01 +0900 Subject: [PATCH 29/29] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/highlight/service/dto/HighlightRequest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java b/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java index f211265ce..673cc8e6a 100644 --- a/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java +++ b/backend/src/main/java/reviewme/highlight/service/dto/HighlightRequest.java @@ -13,10 +13,4 @@ public record HighlightRequest( @Valid @NotEmpty(message = "하이라이트 된 라인을 입력해주세요.") List lines ) { - public List getLineIndexes() { - return lines() - .stream() - .map(HighlightedLineRequest::index) - .toList(); - } }