diff --git a/src/main/java/greeny/backend/domain/bookmark/service/BookmarkService.java b/src/main/java/greeny/backend/domain/bookmark/service/BookmarkService.java index caeddaa..1c1daab 100644 --- a/src/main/java/greeny/backend/domain/bookmark/service/BookmarkService.java +++ b/src/main/java/greeny/backend/domain/bookmark/service/BookmarkService.java @@ -8,13 +8,9 @@ import greeny.backend.domain.product.dto.GetSimpleProductInfosResponseDto; import greeny.backend.domain.product.entity.Product; import greeny.backend.domain.product.service.ProductService; -import greeny.backend.domain.review.entity.ProductReview; -import greeny.backend.domain.review.entity.StoreReview; import greeny.backend.domain.store.dto.GetSimpleStoreInfosResponseDto; import greeny.backend.domain.store.entity.Store; import greeny.backend.domain.store.service.StoreService; -import greeny.backend.exception.situation.ProductNotFound; -import greeny.backend.exception.situation.StoreNotFound; import greeny.backend.exception.situation.TypeDoesntExistsException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,9 +22,6 @@ import java.util.List; import java.util.Optional; -import static greeny.backend.domain.review.dto.GetReviewListResponseDto.toProductReviewDTO; -import static greeny.backend.domain.review.dto.GetReviewListResponseDto.toStoreReviewDTO; - @Service @RequiredArgsConstructor @Slf4j @@ -73,7 +66,8 @@ public void toggleStoreBookmark(String type, Long id, Member liker) { // 타입 } private void checkAndToggleStoreBookmarkBySituation(Store store, Member liker) { // 찜한 정보 DB에 저장 or 취소 시 DB 에서 삭제 - Optional storeBookmark = storeBookmarkRepository.findByStoreIdAndLikerId(store.getId(), liker.getId()); + Optional storeBookmark = getOptionalStoreBookmark(store.getId(), liker.getId()); + if(storeBookmark.isPresent()) storeBookmarkRepository.delete(storeBookmark.get()); else @@ -81,7 +75,8 @@ private void checkAndToggleStoreBookmarkBySituation(Store store, Member liker) { } private void toggleProductBookmark(Product product, Member liker) { // 찜한 정보 DB에 저장 or 취소 시 DB 에서 삭제 - Optional productBookmark = productBookmarkRepository.findByProductIdAndLikerId(product.getId(), liker.getId()); + Optional productBookmark = getOptionalProductBookmark(product.getId(), liker.getId()); + if(productBookmark.isPresent()) productBookmarkRepository.delete(productBookmark.get()); else @@ -101,4 +96,12 @@ private ProductBookmark toEntity(Product product, Member liker) { .liker(liker) .build(); } + + public Optional getOptionalStoreBookmark(Long storeId, Long likerId) { + return storeBookmarkRepository.findByStoreIdAndLikerId(storeId, likerId); + } + + public Optional getOptionalProductBookmark(Long productId, Long likerId) { + return productBookmarkRepository.findByProductIdAndLikerId(productId, likerId); + } } diff --git a/src/main/java/greeny/backend/domain/product/controller/ProductController.java b/src/main/java/greeny/backend/domain/product/controller/ProductController.java index 1057fad..9583654 100644 --- a/src/main/java/greeny/backend/domain/product/controller/ProductController.java +++ b/src/main/java/greeny/backend/domain/product/controller/ProductController.java @@ -57,4 +57,18 @@ public Response getSimpleProductInfosWithAuthMember(@RequestParam(required = fal public Response getProductInfo(Long productId){ return success(SUCCESS_TO_GET_PRODUCT_INFO, productService.getProductInfo(productId)); } + + // 인증된 사용자에 대한 제품 상세 조회 API + @Operation(summary = "Get product info with auth member API", description = "put product id what you want to see.") + @ResponseStatus(OK) + @GetMapping("/auth") + public Response getProductInfoWithAuthMember(Long productId){ + return success( + SUCCESS_TO_GET_PRODUCT_INFO, + productService.getProductInfoWithAuthMember( + productId, + bookmarkService.getOptionalProductBookmark(productId, memberService.getCurrentMember().getId()) + ) + ); + } } diff --git a/src/main/java/greeny/backend/domain/product/dto/GetProductInfoResponseDto.java b/src/main/java/greeny/backend/domain/product/dto/GetProductInfoResponseDto.java index 39270c4..0ac4c79 100644 --- a/src/main/java/greeny/backend/domain/product/dto/GetProductInfoResponseDto.java +++ b/src/main/java/greeny/backend/domain/product/dto/GetProductInfoResponseDto.java @@ -20,8 +20,9 @@ public class GetProductInfoResponseDto { private Integer deliveryFee; private String contentUrl; private String phone; + private Boolean isBookmarked; - public static GetProductInfoResponseDto from(Product product) { + public static GetProductInfoResponseDto from(Product product, boolean isBookmarked) { return GetProductInfoResponseDto.builder() .id(product.getId()) .name(product.getName()) @@ -32,6 +33,7 @@ public static GetProductInfoResponseDto from(Product product) { .deliveryFee(product.getDeliveryFee()) .contentUrl(product.getContentUrl()) .phone(product.getStore().getPhone()) + .isBookmarked(isBookmarked) .build(); } } diff --git a/src/main/java/greeny/backend/domain/product/service/ProductService.java b/src/main/java/greeny/backend/domain/product/service/ProductService.java index ee79210..f3db74d 100644 --- a/src/main/java/greeny/backend/domain/product/service/ProductService.java +++ b/src/main/java/greeny/backend/domain/product/service/ProductService.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -59,7 +60,15 @@ public Page getSimpleProductInfosWithAuthMembe // 제품 상세정보 조회 public GetProductInfoResponseDto getProductInfo(Long productId){ Product foundProduct = getProduct(productId); - return GetProductInfoResponseDto.from(foundProduct); + return GetProductInfoResponseDto.from(foundProduct, false); + } + + public GetProductInfoResponseDto getProductInfoWithAuthMember(Long productId, Optional optionalProductBookmark) { + + if(optionalProductBookmark.isPresent()) + return GetProductInfoResponseDto.from(getProduct(productId), true); + + return GetProductInfoResponseDto.from(getProduct(productId), false); } public Product getProduct(Long productId) { diff --git a/src/main/java/greeny/backend/domain/store/controller/StoreController.java b/src/main/java/greeny/backend/domain/store/controller/StoreController.java index 8c6b5e4..04ea632 100644 --- a/src/main/java/greeny/backend/domain/store/controller/StoreController.java +++ b/src/main/java/greeny/backend/domain/store/controller/StoreController.java @@ -69,4 +69,18 @@ public Response getSimpleStoreInfosWithAuthMember( public Response getStoreInfo(Long storeId) { return success(SUCCESS_TO_GET_STORE_INFO, storeService.getStoreInfo(storeId)); } + + // 인증된 사용자에 대한 스토어 상세 정보 API + @Operation(summary = "Get store info with auth member API", description = "put store id what you want to see.") + @ResponseStatus(OK) + @GetMapping("/auth") + public Response getStoreInfoWithAuthMember(Long storeId) { + return success( + SUCCESS_TO_GET_STORE_INFO, + storeService.getStoreInfoWithAuthMember( + storeId, + bookmarkService.getOptionalStoreBookmark(storeId, memberService.getCurrentMember().getId()) + ) + ); + } } \ No newline at end of file diff --git a/src/main/java/greeny/backend/domain/store/dto/GetStoreInfoResponseDto.java b/src/main/java/greeny/backend/domain/store/dto/GetStoreInfoResponseDto.java index 0b3e066..b71854a 100644 --- a/src/main/java/greeny/backend/domain/store/dto/GetStoreInfoResponseDto.java +++ b/src/main/java/greeny/backend/domain/store/dto/GetStoreInfoResponseDto.java @@ -18,8 +18,9 @@ public class GetStoreInfoResponseDto { // 스토어 상세 정보 private String imageUrl; private String location; private String phone; + private Boolean isBookmarked; - public static GetStoreInfoResponseDto from(Store store) { + public static GetStoreInfoResponseDto from(Store store, boolean isBookmarked) { return GetStoreInfoResponseDto.builder() .id(store.getId()) .category(store.getCategory()) @@ -28,6 +29,7 @@ public static GetStoreInfoResponseDto from(Store store) { .imageUrl(store.getImageUrl()) .location(store.getLocation()) .phone(store.getPhone()) + .isBookmarked(isBookmarked) .build(); } } diff --git a/src/main/java/greeny/backend/domain/store/service/StoreService.java b/src/main/java/greeny/backend/domain/store/service/StoreService.java index 53b26f1..bacef22 100644 --- a/src/main/java/greeny/backend/domain/store/service/StoreService.java +++ b/src/main/java/greeny/backend/domain/store/service/StoreService.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -40,7 +41,15 @@ public Page getSimpleStoreInfosWithAuthMember(St ); } public GetStoreInfoResponseDto getStoreInfo(Long storeId) { // Store 상세 정보 가져오기 - return GetStoreInfoResponseDto.from(getStore(storeId)); + return GetStoreInfoResponseDto.from(getStore(storeId), false); + } + + public GetStoreInfoResponseDto getStoreInfoWithAuthMember(Long storeId, Optional optionalStoreBookmark) { + + if(optionalStoreBookmark.isPresent()) + return GetStoreInfoResponseDto.from(getStore(storeId), true); + + return GetStoreInfoResponseDto.from(getStore(storeId), false); } public Store getStore(Long storeId) { // Id 값을 통해 Store 객체 가져오기