Skip to content

Commit

Permalink
Merge pull request #564 from woowacourse-teams/fix/find-all-tags
Browse files Browse the repository at this point in the history
태그 중복 제거 문제 해결
  • Loading branch information
HoeSeong123 authored Aug 22, 2024
2 parents fc23984 + 89f3501 commit 5b00085
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@ public interface TemplateTagJpaRepository extends TemplateTagRepository, JpaRepo

List<TemplateTag> findAllByTemplate(Template template);

List<TemplateTag> findDistinctByTemplateIn(List<Template> templates);
@Query("""
SELECT DISTINCT tt.id.tagId
FROM TemplateTag tt
WHERE tt.id.templateId IN :templateIds
""")
List<Long> findDistinctByTemplateIn(List<Long> templateIds);

@Query("""
SELECT DISTINCT tt.id.templateId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public interface TemplateTagRepository {

List<TemplateTag> findAllByTemplate(Template template);

List<TemplateTag> findDistinctByTemplateIn(List<Template> templates);
List<Long> findDistinctByTemplateIn(List<Long> templateIds);

List<TemplateTag> findAll();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,11 @@ private void validateTagId(Long tagId) {
}

public FindAllTagsResponse findAllByTemplates(List<Template> templates) {
List<TemplateTag> templateTags = templateTagRepository.findDistinctByTemplateIn(templates);
List<Long> templateIds = templates.stream().map(Template::getId).toList();
List<Long> templateTagIds = templateTagRepository.findDistinctByTemplateIn(templateIds);
return new FindAllTagsResponse(
templateTags.stream()
.map(templateTag -> FindTagResponse.from(templateTag.getTag()))
templateTagIds.stream()
.map(id -> FindTagResponse.from(tagRepository.fetchById(id)))
.toList()
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package codezap.tag.repository;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import codezap.category.domain.Category;
import codezap.category.repository.CategoryRepository;
import codezap.global.repository.JpaRepositoryTest;
import codezap.member.domain.Member;
import codezap.member.repository.MemberRepository;
import codezap.tag.domain.Tag;
import codezap.template.domain.Template;
import codezap.template.domain.TemplateTag;
import codezap.template.repository.TemplateRepository;

@JpaRepositoryTest
class TemplateTagJpaRepositoryTest {

@Autowired
private TemplateRepository templateRepository;
@Autowired
private MemberRepository memberRepository;
@Autowired
private CategoryRepository categoryRepository;
@Autowired
private TagRepository tagRepository;
@Autowired
private TemplateTagRepository templateTagRepository;

private Member member1, member2;
private Category category1, category2;
private Tag tag1, tag2;

@BeforeEach
void setUp() {
member1 = memberRepository.save(new Member("[email protected]", "pp"));
member2 = memberRepository.save(new Member("[email protected]", "pp"));

category1 = categoryRepository.save(new Category("Category 1", member1));
category2 = categoryRepository.save(new Category("Category 2", member1));

tag1 = tagRepository.save(new Tag("Tag 1"));
tag2 = tagRepository.save(new Tag("Tag 2"));

Template template1 = new Template(member1, "Template 1", "Description 1", category1);
TemplateTag templateTag11 = new TemplateTag(template1, tag1);
TemplateTag templateTag12 = new TemplateTag(template1, tag2);
templateRepository.save(template1);
templateTagRepository.save(templateTag11);
templateTagRepository.save(templateTag12);

Template template2 = new Template(member1, "Template 2", "Description 2", category2);
TemplateTag templateTag21 = new TemplateTag(template2, tag1);
TemplateTag templateTag22 = new TemplateTag(template2, tag2);
templateRepository.save(template2);
templateTagRepository.save(templateTag21);
templateTagRepository.save(templateTag22);

Template template3 = new Template(member2, "Another Template", "Another Description", category1);
TemplateTag templateTag31 = new TemplateTag(template3, tag2);
templateRepository.save(template3);
templateTagRepository.save(templateTag31);
}

@Test
void testFindDistinctByTemplateIn() {
// given
List<Long> templateIds = List.of(1L, 2L, 3L);

// when
List<Long> result = templateTagRepository.findDistinctByTemplateIn(templateIds);

// then
assertThat(result).isNotEmpty();
assertThat(result.stream().distinct().count())
.isEqualTo(result.size());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,11 @@ public List<TemplateTag> findAll() {
}

@Override
public List<TemplateTag> findDistinctByTemplateIn(List<Template> templates) {
public List<Long> findDistinctByTemplateIn(List<Long> templateIds) {
return templateTags.stream()
.filter(templateTag -> templates.contains(templateTag.getTemplate()))
.filter(templateTag -> templateIds.contains(templateTag.getTemplate().getId()))
.distinct()
.map(templateTag -> templateTag.getTag().getId())
.toList();
}

Expand Down

0 comments on commit 5b00085

Please sign in to comment.