From 33042b1aa0a3d4854fe8413c806063b8249bda9b Mon Sep 17 00:00:00 2001 From: TueBack Date: Sun, 4 Jan 2026 18:04:53 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=97=AC=ED=96=89=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=88=98=20=EC=98=A4=EB=A5=98=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 - TripQueryRepository에 전체 데이터 개수(count) 조회 로직 추가 - TripService에서 PageImpl 생성 시 현재 페이지 크기가 아닌 전체 개수를 전달하도록 수정 - 프론트엔드 페이징 처리(totalElements, totalPages, last) 정상화 --- .../com/retrip/trip/application/in/TripService.java | 6 ++++-- .../out/repository/TripQueryRepository.java | 11 ++++------- .../mysql/query/TripQuerydslRepository.java | 13 ++++++++++--- .../retrip/trip/application/in/TripServiceTest.java | 1 - 4 files changed, 18 insertions(+), 13 deletions(-) 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));