From fb3d12b712f2c2a37473f52ef8712fe2dd36fc07 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 26 Sep 2024 21:45:22 +0900 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20=ED=83=9C=EA=B7=B8=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codezap/tag/repository/TagRepository.java | 2 ++ .../java/codezap/tag/service/TagService.java | 24 +++++++++---------- .../repository/FakeTagRepository.java | 5 ++++ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/codezap/tag/repository/TagRepository.java b/backend/src/main/java/codezap/tag/repository/TagRepository.java index 7344c80ca..550e21a6e 100644 --- a/backend/src/main/java/codezap/tag/repository/TagRepository.java +++ b/backend/src/main/java/codezap/tag/repository/TagRepository.java @@ -13,6 +13,8 @@ public interface TagRepository { Optional findByName(String name); + List findByNameIn(List names); + List findNameByNamesIn(List names); Tag save(Tag tag); diff --git a/backend/src/main/java/codezap/tag/service/TagService.java b/backend/src/main/java/codezap/tag/service/TagService.java index cc7408527..df77e7bf1 100644 --- a/backend/src/main/java/codezap/tag/service/TagService.java +++ b/backend/src/main/java/codezap/tag/service/TagService.java @@ -1,5 +1,6 @@ package codezap.tag.service; +import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; @@ -25,25 +26,22 @@ public class TagService { @Transactional public void createTags(Template template, List tagNames) { - List existingTags = tagRepository.findNameByNamesIn(tagNames); - templateTagRepository.saveAll( - existingTags.stream() - .map(tagRepository::fetchByName) - .map(tag -> new TemplateTag(template, tag)) - .toList() - ); + List existingTags = new ArrayList<>(tagRepository.findByNameIn(tagNames)); + List existNames = existingTags.stream() + .map(Tag::getName) + .toList(); List newTags = tagRepository.saveAll( tagNames.stream() - .filter(tagName -> !existingTags.contains(tagName)) + .filter(name -> !existNames.contains(name)) .map(Tag::new) .toList() ); - templateTagRepository.saveAll( - newTags.stream() - .map(tag -> new TemplateTag(template, tag)) - .toList() - ); + existingTags.addAll(newTags); + + for (Tag existingTag : existingTags) { + templateTagRepository.save(new TemplateTag(template, existingTag)); + } } public List findAllByTemplate(Template template) { diff --git a/backend/src/test/java/codezap/template/repository/FakeTagRepository.java b/backend/src/test/java/codezap/template/repository/FakeTagRepository.java index 6ec42b0d5..707e12148 100644 --- a/backend/src/test/java/codezap/template/repository/FakeTagRepository.java +++ b/backend/src/test/java/codezap/template/repository/FakeTagRepository.java @@ -52,6 +52,11 @@ public Optional findByName(String name) { return tags.stream().filter(tag -> Objects.equals(tag.getName(), name)).findFirst(); } + @Override + public List findByNameIn(List names) { + return List.of(); + } + @Override public List saveAll(Iterable entities) { entities.forEach(this::save); From f009c44385897841d452cca3de0fb7dc8c111654 Mon Sep 17 00:00:00 2001 From: zangsu Date: Fri, 27 Sep 2024 04:47:37 +0900 Subject: [PATCH 2/6] =?UTF-8?q?refactor:=20TemplateTag=20=EC=9D=98=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20lazy=20loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/codezap/template/domain/TemplateTag.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/codezap/template/domain/TemplateTag.java b/backend/src/main/java/codezap/template/domain/TemplateTag.java index 44317cb7b..40a5adeae 100644 --- a/backend/src/main/java/codezap/template/domain/TemplateTag.java +++ b/backend/src/main/java/codezap/template/domain/TemplateTag.java @@ -5,6 +5,7 @@ import jakarta.persistence.Embeddable; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.MapsId; @@ -36,12 +37,12 @@ private static class TemplateTagId implements Serializable { @EmbeddedId private TemplateTagId id; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @MapsId("templateId") @JoinColumn(name = "template_id") private Template template; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @MapsId("tagId") @JoinColumn(name = "tag_id") private Tag tag; From 434502e1f77f45a5c16bbf04675e0deed532adf2 Mon Sep 17 00:00:00 2001 From: zangsu Date: Fri, 27 Sep 2024 04:51:07 +0900 Subject: [PATCH 3/6] =?UTF-8?q?refactor:=20Tag=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=97=90=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/db/migration/V5__create_idx_tag_name.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 backend/src/main/resources/db/migration/V5__create_idx_tag_name.sql diff --git a/backend/src/main/resources/db/migration/V5__create_idx_tag_name.sql b/backend/src/main/resources/db/migration/V5__create_idx_tag_name.sql new file mode 100644 index 000000000..3ae0cab1b --- /dev/null +++ b/backend/src/main/resources/db/migration/V5__create_idx_tag_name.sql @@ -0,0 +1 @@ +CREATE INDEX idx_tag_name ON tag(name); From 0f525fa25e7a07a1d32dd90636c783028a041838 Mon Sep 17 00:00:00 2001 From: zangsu Date: Fri, 27 Sep 2024 10:40:50 +0900 Subject: [PATCH 4/6] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EC=97=90=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/codezap/tag/domain/Tag.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/main/java/codezap/tag/domain/Tag.java b/backend/src/main/java/codezap/tag/domain/Tag.java index 263950d96..f8088a608 100644 --- a/backend/src/main/java/codezap/tag/domain/Tag.java +++ b/backend/src/main/java/codezap/tag/domain/Tag.java @@ -5,6 +5,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Index; +import jakarta.persistence.Table; import codezap.global.auditing.BaseTimeEntity; import lombok.AccessLevel; @@ -18,6 +20,7 @@ @AllArgsConstructor @Getter @EqualsAndHashCode(of = "id", callSuper = false) +@Table(indexes = @Index(name = "idx_tag_name", columnList = "name")) public class Tag extends BaseTimeEntity { @Id From 576b094d70193bd3d10ff3ccfe9a6e41a3df0b8b Mon Sep 17 00:00:00 2001 From: zangsu Date: Fri, 27 Sep 2024 10:42:33 +0900 Subject: [PATCH 5/6] =?UTF-8?q?refactor:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=EB=A7=8C=20=EC=82=AC=EC=9A=A9=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/codezap/tag/repository/TagRepository.java | 2 -- .../tag/repository/TagJpaRepositoryTest.java | 14 -------------- 2 files changed, 16 deletions(-) diff --git a/backend/src/main/java/codezap/tag/repository/TagRepository.java b/backend/src/main/java/codezap/tag/repository/TagRepository.java index 550e21a6e..ab5760e51 100644 --- a/backend/src/main/java/codezap/tag/repository/TagRepository.java +++ b/backend/src/main/java/codezap/tag/repository/TagRepository.java @@ -15,8 +15,6 @@ public interface TagRepository { List findByNameIn(List names); - List findNameByNamesIn(List names); - Tag save(Tag tag); List saveAll(Iterable entities); diff --git a/backend/src/test/java/codezap/tag/repository/TagJpaRepositoryTest.java b/backend/src/test/java/codezap/tag/repository/TagJpaRepositoryTest.java index c4d3536a0..5025d4555 100644 --- a/backend/src/test/java/codezap/tag/repository/TagJpaRepositoryTest.java +++ b/backend/src/test/java/codezap/tag/repository/TagJpaRepositoryTest.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import java.util.List; import java.util.Optional; import org.junit.jupiter.api.DisplayName; @@ -90,17 +89,4 @@ void findByNameFailByNotExistsId() { assertThat(actual).isEmpty(); } } - - @Test - @DisplayName("이름 목록 조회 성공 : 이름 목록에 포함된 모든 태그를 반환한다.") - void findNameByNamesIn() { - tagRepository.save(new Tag("태그1")); - tagRepository.save(new Tag("태그2")); - tagRepository.save(new Tag("태그3")); - - List actual = tagRepository.findNameByNamesIn(List.of("태그1", "태그3", "태그4")); - - assertThat(actual).hasSize(2) - .containsExactly("태그1", "태그3"); - } } From 8280a69c6e06f7e6ae85f9a6b5adfcb6afd4275f Mon Sep 17 00:00:00 2001 From: zangsu Date: Fri, 27 Sep 2024 11:06:47 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20Override=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/repository/FakeTagRepository.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/backend/src/test/java/codezap/template/repository/FakeTagRepository.java b/backend/src/test/java/codezap/template/repository/FakeTagRepository.java index 707e12148..f7175c519 100644 --- a/backend/src/test/java/codezap/template/repository/FakeTagRepository.java +++ b/backend/src/test/java/codezap/template/repository/FakeTagRepository.java @@ -30,17 +30,6 @@ public Tag fetchById(Long id) { .orElseThrow(() -> new CodeZapException(HttpStatus.NOT_FOUND, "식별자 " + id + "에 해당하는 태그가 존재하지 않습니다.")); } - @Override - public List findNameByNamesIn(List names) { - return names.stream() - .filter(this::existsByName) - .toList(); - } - - private boolean existsByName(String name) { - return tags.stream().anyMatch(tag -> Objects.equals(tag.getName(), name)); - } - @Override public Tag fetchByName(String name) { return findByName(name).orElseThrow(