From 46c0e92541defd46e692e9ca67d56a7ba6a0f25a Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Wed, 25 Sep 2024 18:10:19 +0900 Subject: [PATCH 01/21] =?UTF-8?q?refactor(template):=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EC=84=B1=EB=8A=A5?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0=EC=9D=84=20=EC=9C=84=ED=95=B4=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tag/repository/TemplateTagJpaRepository.java | 9 ++++++++- .../tag/repository/TemplateTagRepository.java | 3 +++ .../repository/TemplateTagJpaRepositoryTest.java | 14 +++++++------- .../repository/FakeTemplateTagRepository.java | 9 +++++++++ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java b/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java index 322574cef..66eb7e516 100644 --- a/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java +++ b/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java @@ -5,13 +5,20 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import codezap.tag.domain.Tag; import codezap.template.domain.Template; import codezap.template.domain.TemplateTag; @SuppressWarnings("unused") public interface TemplateTagJpaRepository extends TemplateTagRepository, JpaRepository { - List findAllByTemplate(Template template); + @Query(""" + SELECT t + FROM Tag t + JOIN TemplateTag tt ON t.id = tt.id.tagId + WHERE tt.template = :template + """) + List findAllTagsByTemplate(Template template); @Query(""" SELECT DISTINCT tt.id.tagId diff --git a/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java b/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java index e1f47840f..fef516af5 100644 --- a/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java +++ b/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java @@ -2,6 +2,7 @@ import java.util.List; +import codezap.tag.domain.Tag; import codezap.template.domain.Template; import codezap.template.domain.TemplateTag; @@ -9,6 +10,8 @@ public interface TemplateTagRepository { List findAllByTemplate(Template template); + List findAllTagsByTemplate(Template template); + List findDistinctByTemplateIn(List templateIds); TemplateTag save(TemplateTag templateTag); diff --git a/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java b/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java index 97edf2bc5..fbb928e99 100644 --- a/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java +++ b/backend/src/test/java/codezap/tag/repository/TemplateTagJpaRepositoryTest.java @@ -51,8 +51,8 @@ void setUp() { } @Test - @DisplayName("Template 을 이용한 TemplateTag 목록 조회 성공") - void findAllByTemplateTest() { + @DisplayName("Template 을 이용한 Tag 목록 조회 성공") + void findAllTagsByTemplateTest() { //given Template template = templateRepository.save(createNthTemplate(member, category, 1)); @@ -60,15 +60,15 @@ void findAllByTemplateTest() { Tag tag2 = tagRepository.save(new Tag("tag2")); Tag tag3 = tagRepository.save(new Tag("tag3")); - TemplateTag templateTag1 = templateTagRepository.save(new TemplateTag(template, tag1)); - TemplateTag templateTag2 = templateTagRepository.save(new TemplateTag(template, tag2)); + templateTagRepository.save(new TemplateTag(template, tag1)); + templateTagRepository.save(new TemplateTag(template, tag2)); //when - List templateTags = templateTagRepository.findAllByTemplate(template); + List tags = templateTagRepository.findAllTagsByTemplate(template); //then - assertThat(templateTags).containsExactly(templateTag1, templateTag2) - .doesNotContain(new TemplateTag(template, tag3)); + assertThat(tags).containsExactly(tag1, tag2) + .doesNotContain(tag3); } @Nested diff --git a/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java b/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java index d6dba3394..06b679cf3 100644 --- a/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java +++ b/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Objects; +import codezap.tag.domain.Tag; import codezap.tag.repository.TemplateTagRepository; import codezap.template.domain.Template; import codezap.template.domain.TemplateTag; @@ -23,6 +24,14 @@ public List findAllByTemplate(Template template) { .toList(); } + @Override + public List findAllTagsByTemplate(Template template) { + return templateTags.stream() + .filter(templateTag -> Objects.equals(templateTag.getTemplate(), template)) + .map(TemplateTag::getTag) + .toList(); + } + @Override public TemplateTag save(TemplateTag entity) { var saved = new TemplateTag( From 24af44b080a3993b9d02bfb49e6f106196a5e908 Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Wed, 25 Sep 2024 18:16:15 +0900 Subject: [PATCH 02/21] =?UTF-8?q?refactor(Category):=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=EC=97=90=20=EB=A9=A4=EB=B2=84=20id=20?= =?UTF-8?q?=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=84=A4=EC=A0=95=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 --- backend/src/main/java/codezap/category/domain/Category.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/src/main/java/codezap/category/domain/Category.java b/backend/src/main/java/codezap/category/domain/Category.java index fe559463e..f1d31350c 100644 --- a/backend/src/main/java/codezap/category/domain/Category.java +++ b/backend/src/main/java/codezap/category/domain/Category.java @@ -5,6 +5,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Index; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; @@ -29,7 +30,11 @@ name = "name_with_member", columnNames = {"member_id", "name"} ) + }, + indexes = { + @Index(name = "idx_member_id", columnList = "member_id") } + ) @Getter @EqualsAndHashCode(of = "id", callSuper = false) From e8810e795c5f1f7c209fd1a87b9f3be1b42998a7 Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:40:10 +0900 Subject: [PATCH 03/21] =?UTF-8?q?refactor(template):=20=EC=86=8C=EC=8A=A4?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20@Modifying=20=EB=A1=9C=20=ED=95=98=EB=82=98=EC=9D=98=20sql?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=84=EC=B2=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/SourceCodeJpaRepository.java | 6 +++- .../repository/SourceCodeRepository.java | 2 +- .../template/service/SourceCodeService.java | 4 +-- .../facade/TemplateApplicationService.java | 2 +- .../repository/FakeSourceCodeRepository.java | 5 ++-- .../repository/SourceCodeRepositoryTest.java | 10 ++++--- .../service/SourceCodeServiceTest.java | 29 ++++++++++++++++--- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/backend/src/main/java/codezap/template/repository/SourceCodeJpaRepository.java b/backend/src/main/java/codezap/template/repository/SourceCodeJpaRepository.java index 4a378cd69..57fcc7243 100644 --- a/backend/src/main/java/codezap/template/repository/SourceCodeJpaRepository.java +++ b/backend/src/main/java/codezap/template/repository/SourceCodeJpaRepository.java @@ -4,6 +4,8 @@ import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.http.HttpStatus; import codezap.global.exception.CodeZapException; @@ -31,5 +33,7 @@ default SourceCode fetchByTemplateAndOrdinal(Template template, int ordinal) { int countByTemplate(Template template); - void deleteByTemplateId(Long id); + @Modifying(clearAutomatically = true) + @Query("DELETE FROM SourceCode s WHERE s.template.id in :templateIds") + void deleteByTemplateIds(List templateIds); } diff --git a/backend/src/main/java/codezap/template/repository/SourceCodeRepository.java b/backend/src/main/java/codezap/template/repository/SourceCodeRepository.java index 6ef0d3bd0..1f6936857 100644 --- a/backend/src/main/java/codezap/template/repository/SourceCodeRepository.java +++ b/backend/src/main/java/codezap/template/repository/SourceCodeRepository.java @@ -25,5 +25,5 @@ public interface SourceCodeRepository { void deleteById(Long id); - void deleteByTemplateId(Long id); + void deleteByTemplateIds(List templateIds); } diff --git a/backend/src/main/java/codezap/template/service/SourceCodeService.java b/backend/src/main/java/codezap/template/service/SourceCodeService.java index 092ac47b3..a826772da 100644 --- a/backend/src/main/java/codezap/template/service/SourceCodeService.java +++ b/backend/src/main/java/codezap/template/service/SourceCodeService.java @@ -99,7 +99,7 @@ private void validateSourceCodesCount(Template template, UpdateTemplateRequest u } @Transactional - public void deleteByIds(List templateIds) { - templateIds.forEach(sourceCodeRepository::deleteByTemplateId); + public void deleteByTemplateIds(List templateIds) { + sourceCodeRepository.deleteByTemplateIds(templateIds); } } diff --git a/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java b/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java index a780e5456..a40905256 100644 --- a/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java +++ b/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java @@ -117,7 +117,7 @@ public void update(Member member, Long templateId, UpdateTemplateRequest updateT @Transactional public void deleteByMemberAndIds(Member member, List ids) { thumbnailService.deleteByTemplateIds(ids); - sourceCodeService.deleteByIds(ids); + sourceCodeService.deleteByTemplateIds(ids); tagService.deleteByIds(ids); templateService.deleteByMemberAndIds(member, ids); } diff --git a/backend/src/test/java/codezap/template/repository/FakeSourceCodeRepository.java b/backend/src/test/java/codezap/template/repository/FakeSourceCodeRepository.java index ef88a884c..39a6adbf0 100644 --- a/backend/src/test/java/codezap/template/repository/FakeSourceCodeRepository.java +++ b/backend/src/test/java/codezap/template/repository/FakeSourceCodeRepository.java @@ -96,8 +96,9 @@ public void deleteById(Long id) { } @Override - public void deleteByTemplateId(Long id) { - sourceCodes.removeIf(sourceCode -> Objects.equals(sourceCode.getTemplate().getId(), id)); + public void deleteByTemplateIds(List templateIds) { + templateIds.forEach(id -> + sourceCodes.removeIf(sourceCode -> Objects.equals(sourceCode.getId(), id))); } private long getOrGenerateId(SourceCode entity) { diff --git a/backend/src/test/java/codezap/template/repository/SourceCodeRepositoryTest.java b/backend/src/test/java/codezap/template/repository/SourceCodeRepositoryTest.java index e84fb883b..0fe9a0660 100644 --- a/backend/src/test/java/codezap/template/repository/SourceCodeRepositoryTest.java +++ b/backend/src/test/java/codezap/template/repository/SourceCodeRepositoryTest.java @@ -3,6 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.util.List; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -176,11 +178,11 @@ void testDeleteByTemplateId() { var category1 = categoryRepository.save(CategoryFixture.getFirstCategory()); var template1 = templateRepository.save(new Template(member1, "Template 1", "Description 1", category1)); var template2 = templateRepository.save(new Template(member1, "Template 2", "Description 2", category1)); - var sourceCode1 = sut.save(new SourceCode(template1, "SourceCode 1", "Content 1", 1)); - var sourceCode2 = sut.save(new SourceCode(template1, "SourceCode 2", "Content 2", 2)); - var sourceCode3 = sut.save(new SourceCode(template2, "SourceCode 3", "Content 3", 1)); + sut.save(new SourceCode(template1, "SourceCode 1", "Content 1", 1)); + sut.save(new SourceCode(template1, "SourceCode 2", "Content 2", 2)); + sut.save(new SourceCode(template2, "SourceCode 3", "Content 3", 1)); - sut.deleteByTemplateId(1L); + sut.deleteByTemplateIds(List.of(1L)); var result = sut.findAllByTemplate(template1); assertThat(result).isEmpty(); diff --git a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java index e1f99793f..248cb3868 100644 --- a/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java +++ b/backend/src/test/java/codezap/template/service/SourceCodeServiceTest.java @@ -421,26 +421,47 @@ private UpdateTemplateRequest getUpdateTemplateRequest( class DeleteByIds { @Test - @DisplayName("성공") - void deleteByIds() { + @DisplayName("성공: 템플릿 한 개의 소스코드 삭제") + void deleteById() { // given Template template = createSavedTemplate(); sourceCodeRepository.save(SourceCodeFixture.get(template, 1)); sourceCodeRepository.save(SourceCodeFixture.get(template, 2)); // when - sourceCodeService.deleteByIds(List.of(template.getId())); + sourceCodeService.deleteByTemplateIds(List.of(template.getId())); // then assertThat(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); } + @Test + @DisplayName("성공: 템플릿 두 개의 소스코드 삭제") + void deleteByIds() { + // given + Template template1 = createSavedTemplate(); + sourceCodeRepository.save(SourceCodeFixture.get(template1, 1)); + sourceCodeRepository.save(SourceCodeFixture.get(template1, 2)); + Template template2 = createSavedTemplate(); + sourceCodeRepository.save(SourceCodeFixture.get(template2, 1)); + sourceCodeRepository.save(SourceCodeFixture.get(template2, 2)); + + // when + sourceCodeService.deleteByTemplateIds(List.of(template1.getId(), template2.getId())); + + // then + assertAll( + () -> assertThat(sourceCodeRepository.findAllByTemplate(template1)).isEmpty(), + () -> assertThat(sourceCodeRepository.findAllByTemplate(template2)).isEmpty() + ); + } + @Test @DisplayName("성공: 소스 코드가 존재하지 않는 경우") void deleteByIds_WhenIdNotExist() { Template template = createSavedTemplate(); - sourceCodeService.deleteByIds(List.of(template.getId())); + sourceCodeService.deleteByTemplateIds(List.of(template.getId())); assertThat(sourceCodeRepository.findAllByTemplate(template)).isEmpty(); } From b0523112bcc97826b9ac660cb7bd1aed13ede80f Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:42:02 +0900 Subject: [PATCH 04/21] =?UTF-8?q?refactor(template):=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=ED=83=9C=EA=B7=B8=20=EC=82=AD=EC=A0=9C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20@Modifying=20=EB=A1=9C=20=ED=95=98=EB=82=98?= =?UTF-8?q?=EC=9D=98=20sql=EB=A1=9C=20=EC=A0=84=EC=B2=B4=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tag/repository/TemplateTagJpaRepository.java | 5 ++++- .../codezap/tag/repository/TemplateTagRepository.java | 4 +++- .../src/main/java/codezap/tag/service/TagService.java | 5 ++--- .../service/facade/TemplateApplicationService.java | 2 +- .../test/java/codezap/tag/service/TagServiceTest.java | 4 ++-- .../template/repository/FakeTemplateTagRepository.java | 10 ++++++++-- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java b/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java index 66eb7e516..bc2822b2e 100644 --- a/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java +++ b/backend/src/main/java/codezap/tag/repository/TemplateTagJpaRepository.java @@ -3,6 +3,7 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import codezap.tag.domain.Tag; @@ -27,5 +28,7 @@ public interface TemplateTagJpaRepository extends TemplateTagRepository, JpaRepo """) List findDistinctByTemplateIn(List templateIds); - void deleteAllByTemplateId(Long id); + @Modifying(clearAutomatically = true) + @Query("DELETE FROM TemplateTag t WHERE t.template.id in :templateIds") + void deleteByTemplateIds(List templateIds); } diff --git a/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java b/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java index fef516af5..97b01db70 100644 --- a/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java +++ b/backend/src/main/java/codezap/tag/repository/TemplateTagRepository.java @@ -18,5 +18,7 @@ public interface TemplateTagRepository { List saveAll(Iterable entities); - void deleteAllByTemplateId(Long id); + void deleteAllByTemplateId(Long templateId); + + void deleteByTemplateIds(List templateIds); } diff --git a/backend/src/main/java/codezap/tag/service/TagService.java b/backend/src/main/java/codezap/tag/service/TagService.java index cc7408527..7872fe571 100644 --- a/backend/src/main/java/codezap/tag/service/TagService.java +++ b/backend/src/main/java/codezap/tag/service/TagService.java @@ -67,8 +67,7 @@ public void updateTags(Template template, List tags) { createTags(template, tags); } - @Transactional - public void deleteByIds(List templateIds) { - templateIds.forEach(templateTagRepository::deleteAllByTemplateId); + public void deleteAllByTemplateIds(List templateIds) { + templateTagRepository.deleteByTemplateIds(templateIds); } } diff --git a/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java b/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java index a40905256..698f2c06b 100644 --- a/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java +++ b/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java @@ -118,7 +118,7 @@ public void update(Member member, Long templateId, UpdateTemplateRequest updateT public void deleteByMemberAndIds(Member member, List ids) { thumbnailService.deleteByTemplateIds(ids); sourceCodeService.deleteByTemplateIds(ids); - tagService.deleteByIds(ids); + tagService.deleteAllByTemplateIds(ids); templateService.deleteByMemberAndIds(member, ids); } } diff --git a/backend/src/test/java/codezap/tag/service/TagServiceTest.java b/backend/src/test/java/codezap/tag/service/TagServiceTest.java index 176d843bc..47bd518e5 100644 --- a/backend/src/test/java/codezap/tag/service/TagServiceTest.java +++ b/backend/src/test/java/codezap/tag/service/TagServiceTest.java @@ -321,7 +321,7 @@ void deleteByIds() { templateTagRepository.save(new TemplateTag(template, tag2)); // when - sut.deleteByIds(List.of(template.getId())); + sut.deleteAllByTemplateIds(List.of(template.getId())); // then assertAll( @@ -338,7 +338,7 @@ void deleteByIds_WhenNotExistTemplateTag() { Template template = createSavedTemplate(); // when - sut.deleteByIds(List.of(template.getId())); + sut.deleteAllByTemplateIds(List.of(template.getId())); // then assertThat(templateTagRepository.findAllByTemplate(template)).isEmpty(); diff --git a/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java b/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java index 06b679cf3..51386ee56 100644 --- a/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java +++ b/backend/src/test/java/codezap/template/repository/FakeTemplateTagRepository.java @@ -50,8 +50,14 @@ public List saveAll(Iterable entities) { } @Override - public void deleteAllByTemplateId(Long id) { - templateTags.removeIf(templateTag -> Objects.equals(templateTag.getTemplate().getId(), id)); + public void deleteAllByTemplateId(Long templateId) { + templateTags.removeIf(templateTag -> Objects.equals(templateTag.getId(), templateId)); + } + + @Override + public void deleteByTemplateIds(List templateIds) { + templateIds.forEach(id -> + templateTags.removeIf(templateTag -> Objects.equals(templateTag.getId(), id))); } @Override From 4141d05eb144bce92dbca17e059d0ff9bf4ce194 Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:42:45 +0900 Subject: [PATCH 05/21] =?UTF-8?q?refactor(template):=20=EC=8D=B8=EB=84=A4?= =?UTF-8?q?=EC=9D=BC=20=EC=82=AD=EC=A0=9C=20=EB=A1=9C=EC=A7=81=20@Modifyin?= =?UTF-8?q?g=20=EB=A1=9C=20=ED=95=98=EB=82=98=EC=9D=98=20sql=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/codezap/tag/service/TagService.java | 1 + .../template/repository/ThumbnailJpaRepository.java | 7 ++++++- .../codezap/template/repository/ThumbnailRepository.java | 2 +- .../java/codezap/template/service/ThumbnailService.java | 2 +- .../template/repository/FakeThumbnailRepository.java | 5 +++-- .../template/repository/ThumbnailRepositoryTest.java | 6 ++++-- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/codezap/tag/service/TagService.java b/backend/src/main/java/codezap/tag/service/TagService.java index 7872fe571..67601e6cd 100644 --- a/backend/src/main/java/codezap/tag/service/TagService.java +++ b/backend/src/main/java/codezap/tag/service/TagService.java @@ -67,6 +67,7 @@ public void updateTags(Template template, List tags) { createTags(template, tags); } + @Transactional public void deleteAllByTemplateIds(List templateIds) { templateTagRepository.deleteByTemplateIds(templateIds); } diff --git a/backend/src/main/java/codezap/template/repository/ThumbnailJpaRepository.java b/backend/src/main/java/codezap/template/repository/ThumbnailJpaRepository.java index 1153d0be9..76c7db471 100644 --- a/backend/src/main/java/codezap/template/repository/ThumbnailJpaRepository.java +++ b/backend/src/main/java/codezap/template/repository/ThumbnailJpaRepository.java @@ -1,8 +1,11 @@ package codezap.template.repository; +import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.http.HttpStatus; import codezap.global.exception.CodeZapException; @@ -21,5 +24,7 @@ default Thumbnail fetchByTemplate(Template template) { Optional findByTemplate(Template template); - void deleteByTemplateId(Long id); + @Modifying(clearAutomatically = true) + @Query("DELETE FROM Thumbnail t WHERE t.template.id in :templateIds") + void deleteByTemplateIds(List templateIds); } diff --git a/backend/src/main/java/codezap/template/repository/ThumbnailRepository.java b/backend/src/main/java/codezap/template/repository/ThumbnailRepository.java index 379081759..fa276f491 100644 --- a/backend/src/main/java/codezap/template/repository/ThumbnailRepository.java +++ b/backend/src/main/java/codezap/template/repository/ThumbnailRepository.java @@ -16,5 +16,5 @@ public interface ThumbnailRepository { Thumbnail save(Thumbnail thumbnail); - void deleteByTemplateId(Long id); + void deleteByTemplateIds(List ids); } diff --git a/backend/src/main/java/codezap/template/service/ThumbnailService.java b/backend/src/main/java/codezap/template/service/ThumbnailService.java index 13260126a..be44ab274 100644 --- a/backend/src/main/java/codezap/template/service/ThumbnailService.java +++ b/backend/src/main/java/codezap/template/service/ThumbnailService.java @@ -32,6 +32,6 @@ public ExploreTemplatesResponse findAll() { @Transactional public void deleteByTemplateIds(List templateIds) { - templateIds.forEach(thumbnailRepository::deleteByTemplateId); + thumbnailRepository.deleteByTemplateIds(templateIds); } } diff --git a/backend/src/test/java/codezap/template/repository/FakeThumbnailRepository.java b/backend/src/test/java/codezap/template/repository/FakeThumbnailRepository.java index e00fb23e6..fb561361e 100644 --- a/backend/src/test/java/codezap/template/repository/FakeThumbnailRepository.java +++ b/backend/src/test/java/codezap/template/repository/FakeThumbnailRepository.java @@ -54,8 +54,9 @@ public Thumbnail save(Thumbnail entity) { } @Override - public void deleteByTemplateId(Long id) { - thumbnails.removeIf(thumbnail -> Objects.equals(thumbnail.getId(), id)); + public void deleteByTemplateIds(List templateIds) { + templateIds.forEach(id -> + thumbnails.removeIf(thumbnail -> Objects.equals(thumbnail.getId(), id))); } private long getOrGenerateId(Thumbnail entity) { diff --git a/backend/src/test/java/codezap/template/repository/ThumbnailRepositoryTest.java b/backend/src/test/java/codezap/template/repository/ThumbnailRepositoryTest.java index 6b835ded7..5aef2de40 100644 --- a/backend/src/test/java/codezap/template/repository/ThumbnailRepositoryTest.java +++ b/backend/src/test/java/codezap/template/repository/ThumbnailRepositoryTest.java @@ -4,6 +4,8 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.util.List; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -74,7 +76,7 @@ void deleteByTemplateIdSuccess() { sut.save(new Thumbnail(template, sourceCode)); // when - sut.deleteByTemplateId(template.getId()); + sut.deleteByTemplateIds(List.of(template.getId())); // then assertThatThrownBy(() -> sut.fetchByTemplate(template)) @@ -85,7 +87,7 @@ void deleteByTemplateIdSuccess() { @Test @DisplayName("템플릿 id로 썸네일 삭제 성공: 존재하지 않는 템플릿의 id로 삭제해도 예외로 처리하지 않는다.") void deleteByNotExistTemplateId() { - assertThatCode(() -> sut.deleteByTemplateId(100L)) + assertThatCode(() -> sut.deleteByTemplateIds(List.of(100L))) .doesNotThrowAnyException(); } } From c4a3f1328b6e7f6183e3d77a2d1ddd81ddaa19c7 Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:12:40 +0900 Subject: [PATCH 06/21] =?UTF-8?q?refactor(service):=20=ED=83=9C=EA=B7=B8?= =?UTF-8?q?=20=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=A1=B0=ED=9A=8C=20join?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20N+1=EC=BF=BC=EB=A6=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/codezap/tag/service/TagService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/main/java/codezap/tag/service/TagService.java b/backend/src/main/java/codezap/tag/service/TagService.java index 67601e6cd..c3565aa5a 100644 --- a/backend/src/main/java/codezap/tag/service/TagService.java +++ b/backend/src/main/java/codezap/tag/service/TagService.java @@ -47,8 +47,7 @@ public void createTags(Template template, List tagNames) { } public List findAllByTemplate(Template template) { - return templateTagRepository.findAllByTemplate(template).stream() - .map(TemplateTag::getTag) + return templateTagRepository.findAllTagsByTemplate(template).stream() .toList(); } From 86d4336652733e58830ae75a2acc62dae9869919 Mon Sep 17 00:00:00 2001 From: kyum-q <109158497+kyum-q@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:04:21 +0900 Subject: [PATCH 07/21] =?UTF-8?q?refactor(tag):=20tag=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EC=8B=9C=20=ED=95=84=EC=9A=94=ED=95=9C=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20id=20=EB=A7=8C=20=EB=B0=9B=EB=8F=84=EB=A1=9D=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 --- backend/src/main/java/codezap/tag/service/TagService.java | 3 +-- .../template/repository/TemplateJpaRepository.java | 8 ++++++++ .../codezap/template/repository/TemplateRepository.java | 2 ++ .../template/repository/FakeTemplateRepository.java | 8 ++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/codezap/tag/service/TagService.java b/backend/src/main/java/codezap/tag/service/TagService.java index c3565aa5a..5b24f7cab 100644 --- a/backend/src/main/java/codezap/tag/service/TagService.java +++ b/backend/src/main/java/codezap/tag/service/TagService.java @@ -52,8 +52,7 @@ public List findAllByTemplate(Template template) { } public FindAllTagsResponse findAllByMemberId(Long memberId) { - List