Skip to content

Commit

Permalink
reviewCount가 0인 항목이 조회가 되면 제외되도록 구현 (#722)
Browse files Browse the repository at this point in the history
* refactor: reviewCount가 0인 항목이 조회가 되면 제외되도록 구현

* refactor: count 할 때 reviewStatus가 포함되도록 변경
  • Loading branch information
cookienc authored Feb 19, 2024
1 parent 8281ea6 commit 3428bfe
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import touch.baton.domain.member.command.Supporter;
import touch.baton.domain.member.command.vo.ReviewCount;

import java.util.List;

Expand All @@ -19,6 +20,7 @@ public class RankQuerydslRepository {
public List<Supporter> findMostReviewSupporterByCount(final int count) {
return jpaQueryFactory.selectFrom(supporter)
.join(supporter.member, member).fetchJoin()
.where(supporter.reviewCount.ne(new ReviewCount(0)))
.orderBy(supporter.reviewCount.value.desc())
.limit(count)
.fetch();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ public Page<RunnerPost> pageByReviewStatusAndTagReducedName(final Long previousL
.where(tag.tagReducedName.eq(tagReducedName));
}

final JPAQuery<RunnerPost> countQuery = jpaQueryFactory.selectFrom(runnerPost);
final JPAQuery<RunnerPost> countQuery = jpaQueryFactory.selectFrom(runnerPost)
.where(reviewStatusEq(reviewStatus));

if (tagReducedName != null) {
countQuery.leftJoin(runnerPost.runnerPostTags.runnerPostTags, runnerPostTag)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,25 @@ void findMostReviewSupporterByCount() {
() -> assertThat(actual.get(1).getReviewCount().getValue()).isEqualTo(4)
);
}

@DisplayName("Supporter의 count가 안되더라도 ReviewCount가 0이면 조회되지 않는다.")
@Test
void findMostReviewSupporterByCount_having_count_is_zero() {
// given
persistSupporter(new ReviewCount(0), MemberFixture.createEthan());
persistSupporter(new ReviewCount(3), MemberFixture.createHyena());
persistSupporter(new ReviewCount(8), MemberFixture.createDitoo());

// when
final int count = 3;
final int zeroCount = 1;
final List<Supporter> actual = rankQueryDslRepository.findMostReviewSupporterByCount(count);

// then
assertAll(
() -> assertThat(actual).hasSize(count - zeroCount),
() -> assertThat(actual.get(0).getReviewCount().getValue()).isEqualTo(8),
() -> assertThat(actual.get(1).getReviewCount().getValue()).isEqualTo(3)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ void setUp() {
@Test
void readMostReviewSupporter() {
// given

for (int reviewedCount = 0; reviewedCount < 5; reviewedCount++) {
persistSupporter(new ReviewCount(reviewedCount), MemberFixture.create(memberName("member" + reviewedCount)));
}
Expand Down Expand Up @@ -73,6 +72,48 @@ void readMostReviewSupporter() {
);
}

@DisplayName("Supporter의 ReviewCount가 높은 순으로 count 개수 만큼 조회하고, 그 중 ReviewCount가 0이면 제외된다.")
@Test
void readMostReviewSupporter_when_has_zero_reviewCount() {
// given
final TechnicalTag javaTag = technicalTagQueryRepository.save(TechnicalTagFixture.createJava());
final TechnicalTag springTag = technicalTagQueryRepository.save(TechnicalTagFixture.createSpring());
final TechnicalTag reactTag = technicalTagQueryRepository.save(TechnicalTagFixture.createReact());

final Member fourthRankMember = persistMember(MemberFixture.create(memberName("fourth")));
final List<TechnicalTag> fourthRankMembersTechnicalTags = List.of(javaTag, springTag);
persistSupporter(new ReviewCount(12), fourthRankMember, fourthRankMembersTechnicalTags);

final Member thirdRankMember = persistMember(MemberFixture.create(memberName("third")));
final List<TechnicalTag> thirdRankMembersTechnicalTags = List.of(javaTag, reactTag);
persistSupporter(new ReviewCount(13), thirdRankMember, thirdRankMembersTechnicalTags);

final Member firstRankMember = persistMember(MemberFixture.create(memberName("first")));
final List<TechnicalTag> firstRankMembersTechnicalTags = List.of(javaTag, springTag);
persistSupporter(new ReviewCount(15), firstRankMember, firstRankMembersTechnicalTags);

final Member secondRankMember = persistMember(MemberFixture.create(memberName("second")));
final List<TechnicalTag> secondRankMembersTechnicalTags = List.of(javaTag);
persistSupporter(new ReviewCount(14), secondRankMember, secondRankMembersTechnicalTags);

final Member fifthRankMember = persistMember(MemberFixture.create(memberName("fifth")));
final List<TechnicalTag> fifthMembersTechnicalTags = List.of(reactTag);
persistSupporter(new ReviewCount(0), fifthRankMember, fifthMembersTechnicalTags);

// when
final int maxCount = 5;
final RankResponses<RankResponses.SupporterRank> actual = rankQueryService.readMostReviewSupporter(maxCount);

// then
assertAll(
() -> assertThat(actual.data()).hasSize(4),
() -> assertResponse(actual.data().get(0), 1, "first", 15),
() -> assertResponse(actual.data().get(1), 2, "second", 14),
() -> assertResponse(actual.data().get(2), 3, "third", 13),
() -> assertResponse(actual.data().get(3), 4, "fourth", 12)
);
}

private static void assertResponse(final RankResponses.SupporterRank response, final int rank, final String memberName, final int reviewCount) {
assertAll(
() -> assertThat(response.rank()).isEqualTo(rank),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void readRunnerPostByPageInfoAndTagNameAndReviewStatus_firstPage() {

final Tag javaTag = tagCommandRepository.save(TagFixture.create(tagName("자바")));
final Tag springTag = tagCommandRepository.save(TagFixture.create(tagName("스프링")));
final int totalJavaTagPost = 3;
final int totalJavaTagAndNotStartedPost = 2;

final RunnerPost expectedRunnerPostOne = runnerPostQueryRepository.save(RunnerPostFixture.create(
hyenaRunner,
Expand Down Expand Up @@ -124,7 +124,7 @@ void readRunnerPostByPageInfoAndTagNameAndReviewStatus_firstPage() {
List.of(RunnerPostResponse.Simple.of(expectedRunnerPostTwo, 0L, runnerPostTags),
RunnerPostResponse.Simple.of(expectedRunnerPostOne, 0L, runnerPostTags)),
pageParams,
totalJavaTagPost
totalJavaTagAndNotStartedPost
);

// then
Expand All @@ -140,7 +140,7 @@ void readRunnerPostByPageInfoAndTagNameAndReviewStatus_middlePage() {

final Tag javaTag = tagCommandRepository.save(TagFixture.create(tagName("자바")));
final Tag springTag = tagCommandRepository.save(TagFixture.create(tagName("스프링")));
final int totalJavaTagPost = 4;
final int totalJavaTagAndNotStartedPost = 3;

final RunnerPost expectedRunnerPostOne = runnerPostQueryRepository.save(RunnerPostFixture.create(
hyenaRunner,
Expand Down Expand Up @@ -194,7 +194,7 @@ void readRunnerPostByPageInfoAndTagNameAndReviewStatus_middlePage() {
List.of(RunnerPostResponse.Simple.of(expectedRunnerPostTwo, 0L, runnerPostTags),
RunnerPostResponse.Simple.of(expectedRunnerPostOne, 0L, runnerPostTags)),
pageParams,
totalJavaTagPost
totalJavaTagAndNotStartedPost
);

// then
Expand All @@ -210,7 +210,7 @@ void readRunnerPostByPageInfoAndReviewStatus_firstPage() {

final Tag javaTag = tagCommandRepository.save(TagFixture.create(tagName("자바")));
final Tag springTag = tagCommandRepository.save(TagFixture.create(tagName("스프링")));
final int totalPost = 4;
final int totalNotStartedPost = 3;

final RunnerPost expectedRunnerPostOne = runnerPostQueryRepository.save(RunnerPostFixture.create(
hyenaRunner,
Expand Down Expand Up @@ -260,7 +260,7 @@ void readRunnerPostByPageInfoAndReviewStatus_firstPage() {
RunnerPostResponse.Simple.of(expectedRunnerPostTwo, 0L, runnerPostTags),
RunnerPostResponse.Simple.of(expectedRunnerPostOne, 0L, runnerPostTags)),
pageParams,
totalPost
totalNotStartedPost
);

// then
Expand All @@ -276,7 +276,7 @@ void readRunnerPostByPageInfoAndReviewStatus_middlePage() {

final Tag javaTag = tagCommandRepository.save(TagFixture.create(tagName("자바")));
final Tag springTag = tagCommandRepository.save(TagFixture.create(tagName("스프링")));
final int totalPost = 5;
final int notStartedPost = 4;

final RunnerPost expectedRunnerPostOne = runnerPostQueryRepository.save(RunnerPostFixture.create(
hyenaRunner,
Expand Down Expand Up @@ -332,7 +332,7 @@ void readRunnerPostByPageInfoAndReviewStatus_middlePage() {
RunnerPostResponse.Simple.of(expectedRunnerPostTwo, 0L, runnerPostTags),
RunnerPostResponse.Simple.of(expectedRunnerPostOne, 0L, runnerPostTags)),
pageParams,
totalPost
notStartedPost
);

// then
Expand Down

0 comments on commit 3428bfe

Please sign in to comment.