From b96ad2ed21c237bb0837a7577717d44616fa6114 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Sat, 1 Nov 2025 15:06:45 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[refactor]=20=ED=8E=98=EC=9D=B4=EC=A7=95=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=EC=97=90=20totalSize=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/common/dto/CursorPagingResponse.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/konkuk/chacall/global/common/dto/CursorPagingResponse.java b/src/main/java/konkuk/chacall/global/common/dto/CursorPagingResponse.java index c399156f..679b13ef 100644 --- a/src/main/java/konkuk/chacall/global/common/dto/CursorPagingResponse.java +++ b/src/main/java/konkuk/chacall/global/common/dto/CursorPagingResponse.java @@ -5,14 +5,24 @@ public record CursorPagingResponse( List content, Long lastCursor, - boolean hasNext + boolean hasNext, + Long totalSize ) { public static CursorPagingResponse of( List content, CursorExtractor extractor, boolean hasNext + ) { + return of(content, extractor, hasNext, null); + } + + public static CursorPagingResponse of( + List content, + CursorExtractor extractor, + boolean hasNext, + Long totalSize ) { Long lastCursor = (content == null || content.isEmpty()) ? null : extractor.extractCursor(content.get(content.size() - 1)); - return new CursorPagingResponse<>(content, lastCursor, hasNext); + return new CursorPagingResponse<>(content, lastCursor, hasNext, totalSize); } } \ No newline at end of file From dd9e12e32fa2cb0fe72d0388bf6745b10f778530 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Sat, 1 Nov 2025 15:07:00 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[fix]=20=EC=9E=98=EB=AA=BB=EB=90=9C=20?= =?UTF-8?q?=EC=BB=A4=EC=84=9C=20=ED=82=A4=20=EB=B0=98=ED=99=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../foodtruck/SavedFoodTruckService.java | 6 ++++-- .../repository/SavedFoodTruckRepository.java | 6 ++++++ .../dto/response/SavedFoodTruckResponse.java | 14 +++++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/konkuk/chacall/domain/member/application/foodtruck/SavedFoodTruckService.java b/src/main/java/konkuk/chacall/domain/member/application/foodtruck/SavedFoodTruckService.java index 05b52093..4dd7973b 100644 --- a/src/main/java/konkuk/chacall/domain/member/application/foodtruck/SavedFoodTruckService.java +++ b/src/main/java/konkuk/chacall/domain/member/application/foodtruck/SavedFoodTruckService.java @@ -61,10 +61,12 @@ public CursorPagingResponse getSavedFoodTrucks(CursorPag // 응답 DTO로 변환 List responses = savedFoodTrucks.stream() - .map(SavedFoodTruck::getFoodTruck) .map(SavedFoodTruckResponse::of) .toList(); - return CursorPagingResponse.of(responses, SavedFoodTruckResponse::foodTruckId, savedFoodTruckSlice.hasNext()); + // 전체 저장 푸드트럭 갯수 조회 + long totalSize = savedFoodTruckRepository.countByMemberAndFoodTruckViewedStatus(member, FoodTruckViewedStatus.ON); + + return CursorPagingResponse.of(responses, SavedFoodTruckResponse::savedFoodTruckId, savedFoodTruckSlice.hasNext(), totalSize); } } diff --git a/src/main/java/konkuk/chacall/domain/member/domain/repository/SavedFoodTruckRepository.java b/src/main/java/konkuk/chacall/domain/member/domain/repository/SavedFoodTruckRepository.java index 089cb300..bfabbb9d 100644 --- a/src/main/java/konkuk/chacall/domain/member/domain/repository/SavedFoodTruckRepository.java +++ b/src/main/java/konkuk/chacall/domain/member/domain/repository/SavedFoodTruckRepository.java @@ -58,4 +58,10 @@ select exists ( """) boolean existsByMemberIdAndFoodTruckId(@Param("userId") Long userId, @Param("foodTruckId") Long foodTruckId); + + @Query("SELECT COUNT(sft) FROM SavedFoodTruck sft " + + "WHERE sft.member = :member " + + "AND sft.foodTruck.foodTruckViewedStatus = :status") + long countByMemberAndFoodTruckViewedStatus(@Param("member") User member, + @Param("status") FoodTruckViewedStatus status); } diff --git a/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java b/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java index df344d08..a28be601 100644 --- a/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java +++ b/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java @@ -3,6 +3,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import konkuk.chacall.domain.foodtruck.domain.model.FoodTruck; import konkuk.chacall.domain.foodtruck.domain.value.FoodTruckInfo; +import konkuk.chacall.domain.member.domain.SavedFoodTruck; +import net.minidev.json.annotate.JsonIgnore; import java.util.List; @@ -20,9 +22,14 @@ public record SavedFoodTruckResponse( @Schema(description = "푸드트럭 평균 평점", example = "4.5") Double averageRating, @Schema(description = "푸드트럭 평점 수", example = "100") - Integer ratingCount + Integer ratingCount, + + @JsonIgnore + @Schema(hidden = true, description = "커서 계산용 내부 필드 (응답에 미포함)") + Long savedFoodTruckId ) { - public static SavedFoodTruckResponse of(FoodTruck foodTruck) { + public static SavedFoodTruckResponse of(SavedFoodTruck savedFoodTruck) { + FoodTruck foodTruck = savedFoodTruck.getFoodTruck(); FoodTruckInfo foodTruckInfo = foodTruck.getFoodTruckInfo(); return new SavedFoodTruckResponse( foodTruck.getFoodTruckId(), @@ -31,7 +38,8 @@ public static SavedFoodTruckResponse of(FoodTruck foodTruck) { foodTruckInfo.getDescription(), foodTruckInfo.getMenuCategoryList().getMenuCategoryLabelList(), foodTruck.getRatingInfo().getAverageRating(), - foodTruck.getRatingInfo().getRatingCount() + foodTruck.getRatingInfo().getRatingCount(), + savedFoodTruck.getSavedFoodTruckId() ); } } From 139801673bd461ee7be11a1ca95fba46511cb1d4 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Sat, 1 Nov 2025 18:16:20 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[fix]=20jackson=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=EB=A1=9C=20import=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/dto/response/SavedFoodTruckResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java b/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java index a28be601..6183db2a 100644 --- a/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java +++ b/src/main/java/konkuk/chacall/domain/member/presentation/dto/response/SavedFoodTruckResponse.java @@ -1,10 +1,10 @@ package konkuk.chacall.domain.member.presentation.dto.response; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import konkuk.chacall.domain.foodtruck.domain.model.FoodTruck; import konkuk.chacall.domain.foodtruck.domain.value.FoodTruckInfo; import konkuk.chacall.domain.member.domain.SavedFoodTruck; -import net.minidev.json.annotate.JsonIgnore; import java.util.List;