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/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/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 725bae0..eb0bae9 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 = @@ -239,10 +249,10 @@ 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)) + .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; }