diff --git a/src/main/java/com/retrip/trip/application/in/TripService.java b/src/main/java/com/retrip/trip/application/in/TripService.java index 7f98a6c..614633c 100644 --- a/src/main/java/com/retrip/trip/application/in/TripService.java +++ b/src/main/java/com/retrip/trip/application/in/TripService.java @@ -64,9 +64,11 @@ public TripUpdateVisibilityResponse updateTripVisibility(UUID tripId, TripUpdate @Transactional(readOnly = true) @Override public Page getTrips(Pageable page) { - List trips = tripQueryRepository.findTrips(page); + Page tripsPage = tripQueryRepository.findTrips(page); + List trips = tripsPage.getContent(); List hashTags = tripQueryRepository.findHashTags(trips); - return new PageImpl<>(TripResponse.of(trips, hashTags), page, trips.size()); + + return new PageImpl<>(TripResponse.of(trips, hashTags), page, tripsPage.getTotalElements()); } @Override diff --git a/src/main/java/com/retrip/trip/application/out/repository/TripQueryRepository.java b/src/main/java/com/retrip/trip/application/out/repository/TripQueryRepository.java index b416d05..fb8c031 100644 --- a/src/main/java/com/retrip/trip/application/out/repository/TripQueryRepository.java +++ b/src/main/java/com/retrip/trip/application/out/repository/TripQueryRepository.java @@ -2,20 +2,17 @@ import com.retrip.trip.application.in.response.MyTripResponse; import com.retrip.trip.domain.entity.Trip; - import com.retrip.trip.domain.entity.TripHashTag; - import com.retrip.trip.domain.vo.TripStatus; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + import java.util.List; import java.util.Optional; - import java.util.UUID; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; - public interface TripQueryRepository { - List findTrips(Pageable page); + Page findTrips(Pageable page); Page findMyTrips(UUID memberId, TripStatus tripStatus, Pageable page); diff --git a/src/main/java/com/retrip/trip/infra/adapter/out/persistence/mysql/query/TripQuerydslRepository.java b/src/main/java/com/retrip/trip/infra/adapter/out/persistence/mysql/query/TripQuerydslRepository.java index 577f657..482163f 100644 --- a/src/main/java/com/retrip/trip/infra/adapter/out/persistence/mysql/query/TripQuerydslRepository.java +++ b/src/main/java/com/retrip/trip/infra/adapter/out/persistence/mysql/query/TripQuerydslRepository.java @@ -3,10 +3,10 @@ import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import com.retrip.trip.application.in.response.MyTripResponse; import com.retrip.trip.application.out.repository.TripQueryRepository; -import com.retrip.trip.domain.entity.QTrip; import com.retrip.trip.domain.entity.QTripParticipant; import com.retrip.trip.domain.entity.Trip; import com.retrip.trip.domain.entity.TripHashTag; @@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; import org.springframework.stereotype.Repository; import java.util.List; @@ -33,13 +34,19 @@ public class TripQuerydslRepository implements TripQueryRepository { private final JPAQueryFactory query; @Override - public List findTrips(Pageable page) { - return query + public Page findTrips(Pageable page) { + List content = query .selectFrom(trip) .offset(page.getOffset()) .limit(page.getPageSize()) .orderBy(trip.createdAt.desc()) .fetch(); + + JPAQuery countQuery = query + .select(trip.count()) + .from(trip); + + return PageableExecutionUtils.getPage(content, page, countQuery::fetchOne); } @Override diff --git a/src/test/java/com/retrip/trip/application/in/TripServiceTest.java b/src/test/java/com/retrip/trip/application/in/TripServiceTest.java index 97b442a..3c6a054 100644 --- a/src/test/java/com/retrip/trip/application/in/TripServiceTest.java +++ b/src/test/java/com/retrip/trip/application/in/TripServiceTest.java @@ -81,7 +81,6 @@ private Trip createProgressTrip(UUID leaderId) { @Test void 여행_목록을_조회한다() { - // TripFixture 호출 시 status 파라미터 관련 문제 해결을 위해 createTestTrip 헬퍼 메서드 사용 (위에서 수정함) tripRepository.save(createTestTrip("속초 여행 맴버 구함", "속초 여행은 이렇게이렇게 갈겁니다~", TripCategory.DOMESTIC, TripStatus.RECRUITING)); tripRepository.save(createTestTrip("대구 여행 멤버 구함", "대구 여행은 이렇게이렇게 갈겁니다~", TripCategory.DOMESTIC, TripStatus.RECRUITING)); tripRepository.save(createTestTrip("부산 여행 멤버 구함", "부산 여행은 이렇게이렇게 갈겁니다~", TripCategory.DOMESTIC, TripStatus.RECRUITING));