diff --git a/src/main/java/com/example/spot/repository/querydsl/StudyRepositoryCustom.java b/src/main/java/com/example/spot/repository/querydsl/StudyRepositoryCustom.java index 13bb2171..74b87eee 100644 --- a/src/main/java/com/example/spot/repository/querydsl/StudyRepositoryCustom.java +++ b/src/main/java/com/example/spot/repository/querydsl/StudyRepositoryCustom.java @@ -47,6 +47,7 @@ long countStudyByConditionsAndThemeTypesAndNotInIds( long countStudyByConditionsAndRegionStudiesAndNotInIds( Map search, List regionStudies, StudySortBy sortBy, List studyIds); long countStudyByConditions(Map search, StudySortBy sortBy); + long countRecruitingStudyByConditions(Map search, StudySortBy sortBy); long countStudyByStudyTheme(List studyThemes, StudySortBy sortBy); long countAllByTitleContaining(String title, StudySortBy sortBy); diff --git a/src/main/java/com/example/spot/repository/querydsl/impl/StudyRepositoryCustomImpl.java b/src/main/java/com/example/spot/repository/querydsl/impl/StudyRepositoryCustomImpl.java index 472a63bf..b9defd60 100644 --- a/src/main/java/com/example/spot/repository/querydsl/impl/StudyRepositoryCustomImpl.java +++ b/src/main/java/com/example/spot/repository/querydsl/impl/StudyRepositoryCustomImpl.java @@ -27,6 +27,7 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; +import static com.example.spot.domain.enums.StudyState.RECRUITING; import static com.example.spot.domain.mapping.QMemberStudy.memberStudy; import static com.example.spot.domain.study.QStudy.study; @RequiredArgsConstructor @@ -109,7 +110,7 @@ public List findRecruitingStudyByConditions(Map search, S Pageable pageable) { BooleanBuilder builder = new BooleanBuilder(); getConditions(search, study, builder); - builder.and(study.studyState.eq(StudyState.RECRUITING)); + builder.and(study.studyState.eq(RECRUITING)); JPAQuery query = queryFactory.selectFrom(study) .where(builder) @@ -148,7 +149,7 @@ public List findStudyByConditionsAndThemeTypesAndNotInIds(Map findStudyByConditionsAndRegionStudiesAndNotInIds(Map findRecruitingStudiesByMemberStudy(List memberSt QStudy study = QStudy.study; return queryFactory.selectFrom(study) .where(study.memberStudies.any().in(memberStudy)) - .where(study.studyState.eq(StudyState.RECRUITING)) + .where(study.studyState.eq(RECRUITING)) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); @@ -316,6 +317,17 @@ public long countStudyByConditions(Map search, StudySortBy sortB .fetchCount(); } + @Override + public long countRecruitingStudyByConditions(Map search, StudySortBy sortBy) { + BooleanBuilder builder = new BooleanBuilder(); + getConditions(search, study, builder); + getStudyState(sortBy, builder, study); + return queryFactory.selectFrom(study) + .where(builder) + .where(study.studyState.eq(RECRUITING)) + .fetchCount(); + } + @Override public long countStudyByStudyTheme(List studyThemes, StudySortBy sortBy) { BooleanBuilder builder = new BooleanBuilder(); @@ -356,7 +368,7 @@ public long countByMemberStudiesAndStatusAndIsOwned(List memberStud private static void getStudyState(StudySortBy sortBy, BooleanBuilder builder, QStudy study) { if (sortBy != null && sortBy.equals(StudySortBy.RECRUITING)) - builder.and(study.studyState.eq((StudyState.RECRUITING))); + builder.and(study.studyState.eq((RECRUITING))); if (sortBy != null && sortBy.equals(StudySortBy.COMPLETED)) builder.and(study.studyState.eq((StudyState.COMPLETED))); } diff --git a/src/main/java/com/example/spot/service/study/StudyQueryServiceImpl.java b/src/main/java/com/example/spot/service/study/StudyQueryServiceImpl.java index 078723b9..e77c9f3f 100644 --- a/src/main/java/com/example/spot/service/study/StudyQueryServiceImpl.java +++ b/src/main/java/com/example/spot/service/study/StudyQueryServiceImpl.java @@ -619,7 +619,7 @@ public StudyPreviewDTO findRecruitingStudiesByConditions( throw new StudyHandler(ErrorStatus._STUDY_IS_NOT_MATCH); // 전체 스터디 수 - long totalElements = studyRepository.countStudyByConditions(conditions, sortBy); + long totalElements = studyRepository.countRecruitingStudyByConditions(conditions, sortBy); return getDTOs(studies, pageable, totalElements, SecurityUtils.getCurrentUserId()); } diff --git a/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java b/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java index b7a029c3..d8f31cb8 100644 --- a/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java +++ b/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java @@ -1479,7 +1479,7 @@ void findRecruitingStudiesByConditions() { when(studyRepository.findRecruitingStudyByConditions(searchConditions, sortBy, pageable)) .thenReturn(List.of(study1, study2)); - when(studyRepository.countStudyByConditions(searchConditions, sortBy)) + when(studyRepository.countRecruitingStudyByConditions(searchConditions, sortBy)) .thenReturn(2L); // SecurityContext와 Authentication을 모킹 @@ -1499,7 +1499,7 @@ void findRecruitingStudiesByConditions() { assertNotNull(result); assertEquals(2, result.getTotalElements()); // Verify the count of elements verify(studyRepository).findRecruitingStudyByConditions(searchConditions, sortBy, pageable); - verify(studyRepository).countStudyByConditions(searchConditions, sortBy); + verify(studyRepository).countRecruitingStudyByConditions(searchConditions, sortBy); } @Test