From 676b2e167d38b65df3c032c2d707447da0be6881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A4=80=ED=98=B8?= <2171168@hansung.ac.kr> Date: Wed, 24 Sep 2025 12:30:06 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor=20:=20=EC=B6=94=EC=B2=9C=20?= =?UTF-8?q?=EC=83=81=ED=92=88=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=205=20->=2010?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/DecodEat/domain/products/service/ProductService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/DecodEat/domain/products/service/ProductService.java b/src/main/java/com/DecodEat/domain/products/service/ProductService.java index 725bae0..d6174f1 100644 --- a/src/main/java/com/DecodEat/domain/products/service/ProductService.java +++ b/src/main/java/com/DecodEat/domain/products/service/ProductService.java @@ -239,7 +239,7 @@ public UserBasedRecommendationResponseDto getUserBasedRecommendation(User user) .orElseThrow(()-> new GeneralException(NO_USER_BEHAVIOR_EXISTED)); Product standardProduct = productRepository.findById(standardProductId).orElseThrow(()->new GeneralException(NO_RESULT)); - List products = getProductBasedRecommendation(standardProductId, 5); + List products = getProductBasedRecommendation(standardProductId, 10); return UserBasedRecommendationResponseDto.builder() .standardProduct(ProductConverter.toSearchResultPrevDto(standardProduct)) From e574318e14c674baa2c66b6a93225cedab4d613b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A4=80=ED=98=B8?= <2171168@hansung.ac.kr> Date: Wed, 24 Sep 2025 13:01:24 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=83=81=ED=92=88=20=ED=8E=98=EC=9D=B4=EC=A7=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/products/controller/ProductController.java | 10 ++++++++++ .../com/DecodEat/domain/products/entity/Product.java | 3 +++ .../domain/products/repository/ProductRepository.java | 3 +++ .../domain/products/service/ProductService.java | 10 ++++++++++ 4 files changed, 26 insertions(+) diff --git a/src/main/java/com/DecodEat/domain/products/controller/ProductController.java b/src/main/java/com/DecodEat/domain/products/controller/ProductController.java index 7a986be..ef0bb6c 100644 --- a/src/main/java/com/DecodEat/domain/products/controller/ProductController.java +++ b/src/main/java/com/DecodEat/domain/products/controller/ProductController.java @@ -127,4 +127,14 @@ public ApiResponse getUserBasedRecommendatio return ApiResponse.onSuccess(productService.getUserBasedRecommendation(user)); } + @GetMapping("/my-like") + @Operation(summary = "내가 좋아요 한 상품", description ="내가 좋아요한 상품 페이징") + public ApiResponse> getMyLikedProducts(@CurrentUser User user, + @RequestParam(defaultValue = "1") int page, + @RequestParam(defaultValue = "20") int size){ + Pageable pageable = PageRequest.of(page - 1, size, Sort.by("createdAt").descending()); // 0-based + + return ApiResponse.onSuccess(productService.getMyLikedProducts(user, pageable)); + } + } diff --git a/src/main/java/com/DecodEat/domain/products/entity/Product.java b/src/main/java/com/DecodEat/domain/products/entity/Product.java index 84009ae..fcb7c2e 100644 --- a/src/main/java/com/DecodEat/domain/products/entity/Product.java +++ b/src/main/java/com/DecodEat/domain/products/entity/Product.java @@ -54,6 +54,9 @@ public class Product extends BaseEntity { @OneToMany(mappedBy = "product", cascade = CascadeType.REMOVE, orphanRemoval = true) private List userBehaviors = new ArrayList<>(); + @OneToMany(mappedBy = "product", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List productLikes = new ArrayList<>(); + /** * 상품의 대표 이미지를 새로운 URL로 업데이트 */ diff --git a/src/main/java/com/DecodEat/domain/products/repository/ProductRepository.java b/src/main/java/com/DecodEat/domain/products/repository/ProductRepository.java index 54ab1e8..67ee4c5 100644 --- a/src/main/java/com/DecodEat/domain/products/repository/ProductRepository.java +++ b/src/main/java/com/DecodEat/domain/products/repository/ProductRepository.java @@ -31,4 +31,7 @@ Slice findCompletedProductsByCursor(@Param("cursorId") Long cursorId, @Query(value = "SELECT p.product_id FROM product p JOIN user_behavior ub ON p.product_id = ub.product_id WHERE ub.user_id = :userId AND ub.behavior = :behavior ORDER BY RAND() LIMIT 1", nativeQuery = true) Optional findRandomProductIdByUserIdAndBehavior(@Param("userId") Long userId, @Param("behavior") Behavior behavior); + + @Query("SELECT pl.product FROM ProductLike pl WHERE pl.user.id = :userId") + Page findLikedProductsByUserId(@Param("userId") Long userId, Pageable pageable); } diff --git a/src/main/java/com/DecodEat/domain/products/service/ProductService.java b/src/main/java/com/DecodEat/domain/products/service/ProductService.java index d6174f1..b2d2c19 100644 --- a/src/main/java/com/DecodEat/domain/products/service/ProductService.java +++ b/src/main/java/com/DecodEat/domain/products/service/ProductService.java @@ -192,6 +192,16 @@ public PageResponseDto getRegisterHistory(User user, return new PageResponseDto<>(result); } + public PageResponseDto getMyLikedProducts(User user, Pageable pageable) { + + Long userId = user.getId(); + + Page pagedProducts = productRepository.findLikedProductsByUserId(userId, pageable); + Page result = pagedProducts.map(ProductConverter::toProductPrevDto); + + return new PageResponseDto<>(result); + } + public List getProductBasedRecommendation(Long productId, int limit) { ProductBasedRecommendationRequestDto request = From 845f34eaf5f8fd40e45d82ed10f29f3864c4beed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A4=80=ED=98=B8?= <2171168@hansung.ac.kr> Date: Wed, 24 Sep 2025 13:36:48 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=B6=94=EC=B2=9C=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=83=81=ED=92=88=20dto=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/UserBasedRecommendationResponseDto.java | 2 +- .../com/DecodEat/domain/products/service/ProductService.java | 2 +- .../java/com/DecodEat/domain/report/entity/ImageReport.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/DecodEat/domain/products/dto/response/UserBasedRecommendationResponseDto.java b/src/main/java/com/DecodEat/domain/products/dto/response/UserBasedRecommendationResponseDto.java index d1a1698..9e161b6 100644 --- a/src/main/java/com/DecodEat/domain/products/dto/response/UserBasedRecommendationResponseDto.java +++ b/src/main/java/com/DecodEat/domain/products/dto/response/UserBasedRecommendationResponseDto.java @@ -13,6 +13,6 @@ @Builder public class UserBasedRecommendationResponseDto { private String message; - private ProductSearchResponseDto.SearchResultPrevDto standardProduct; + private ProductSearchResponseDto.ProductPrevDto standardProduct; private List products; } diff --git a/src/main/java/com/DecodEat/domain/products/service/ProductService.java b/src/main/java/com/DecodEat/domain/products/service/ProductService.java index b2d2c19..eb0bae9 100644 --- a/src/main/java/com/DecodEat/domain/products/service/ProductService.java +++ b/src/main/java/com/DecodEat/domain/products/service/ProductService.java @@ -252,7 +252,7 @@ public UserBasedRecommendationResponseDto getUserBasedRecommendation(User user) List products = getProductBasedRecommendation(standardProductId, 10); return UserBasedRecommendationResponseDto.builder() - .standardProduct(ProductConverter.toSearchResultPrevDto(standardProduct)) + .standardProduct(ProductConverter.toProductPrevDto(standardProduct)) .message(message) .products(products) .build(); diff --git a/src/main/java/com/DecodEat/domain/report/entity/ImageReport.java b/src/main/java/com/DecodEat/domain/report/entity/ImageReport.java index e936828..131011f 100644 --- a/src/main/java/com/DecodEat/domain/report/entity/ImageReport.java +++ b/src/main/java/com/DecodEat/domain/report/entity/ImageReport.java @@ -20,7 +20,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class ImageReport extends ReportRecord { - @Column(name = "image_url") + @Column(name = "image_url",length = 2048) private String imageUrl; }