diff --git a/backend/src/main/java/com/handong/rebon/shop/application/ShopService.java b/backend/src/main/java/com/handong/rebon/shop/application/ShopService.java index 5f5940e8..9524dec9 100644 --- a/backend/src/main/java/com/handong/rebon/shop/application/ShopService.java +++ b/backend/src/main/java/com/handong/rebon/shop/application/ShopService.java @@ -14,7 +14,6 @@ import com.handong.rebon.shop.application.dto.request.ShopLikeRequestDto; import com.handong.rebon.shop.application.dto.request.ShopRequestDto; import com.handong.rebon.shop.application.dto.request.ShopSearchDto; -import com.handong.rebon.shop.application.dto.response.LikeShopResponseDto; import com.handong.rebon.shop.application.dto.response.ShopLikeResponseDto; import com.handong.rebon.shop.application.dto.response.ShopResponseDto; import com.handong.rebon.shop.application.dto.response.ShopSimpleResponseDto; @@ -23,9 +22,7 @@ import com.handong.rebon.shop.domain.content.ShopContent; import com.handong.rebon.shop.domain.content.ShopImage; import com.handong.rebon.shop.domain.content.ShopImages; -import com.handong.rebon.shop.domain.like.Likes; import com.handong.rebon.shop.domain.location.Location; -import com.handong.rebon.shop.domain.repository.LikesRepository; import com.handong.rebon.shop.domain.repository.ShopImageRepository; import com.handong.rebon.shop.domain.repository.ShopRepository; import com.handong.rebon.tag.application.TagService; @@ -49,7 +46,6 @@ public class ShopService { private final ShopRepository shopRepository; private final ImageUploader imageUploader; private final ShopImageRepository shopImageRepository; - private final LikesRepository likesRepository; @Transactional public Long create(ShopRequestDto shopRequestDto) { @@ -190,14 +186,18 @@ private ShopImages changeImages(Shop shop, ShopRequestDto shopRequestDto) { } @Transactional(readOnly = true) - public List findLikeShops(Long memberId) { + public List findLikeShops(Long memberId, Long categoryId) { + + Category category = categoryService.findById(categoryId); Member member = memberService.findById(memberId); - List likes = likesRepository.findByMember(member); - return likes.stream() - .map(like -> LikeShopResponseDto.from(like.getShop())) - .collect(Collectors.toList()); + + return member.getLikes().stream() + .filter(like -> like.getShop().sameCategory(category)) + .map(ShopSimpleResponseDto::from) + .collect(Collectors.toList()); } + @Transactional(readOnly = true) public boolean isLike(Long id, LoginMember loginMember) { Shop shop = findById(id); diff --git a/backend/src/main/java/com/handong/rebon/shop/application/dto/response/LikeShopResponseDto.java b/backend/src/main/java/com/handong/rebon/shop/application/dto/response/LikeShopResponseDto.java deleted file mode 100644 index 7ef031d4..00000000 --- a/backend/src/main/java/com/handong/rebon/shop/application/dto/response/LikeShopResponseDto.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.handong.rebon.shop.application.dto.response; - -import java.util.List; -import java.util.stream.Collectors; - -import com.handong.rebon.category.domain.Category; -import com.handong.rebon.shop.application.dto.response.tag.ShopTagResponseDto; -import com.handong.rebon.shop.domain.Shop; - -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class LikeShopResponseDto { - private Long id; - private String name; - private Long categoryId; - private String categoryName; - private double star; - private boolean like; - private List tags; - private String image; - - @Builder - public LikeShopResponseDto(Long id, String name, Category category, double star, boolean like, List tags, String image) { - this.id = id; - this.name = name; - this.categoryId = category.getId(); - this.categoryName = category.getName(); - this.star = star; - this.like = true; - this.tags = tags; - this.image = image; - } - - public static LikeShopResponseDto from(Shop shop) { - List tags = shop.getShopTags().stream() - .map(shopTag -> ShopTagResponseDto.from(shopTag.getTag())) - .collect(Collectors.toList()); - - return LikeShopResponseDto.builder() - .id(shop.getId()) - .name(shop.getName()) - .category(shop.getCategory()) - .star(shop.getStar()) - .tags(tags) - .image(shop.getMainImage()) - .build(); - } -} diff --git a/backend/src/main/java/com/handong/rebon/shop/application/dto/response/ShopSimpleResponseDto.java b/backend/src/main/java/com/handong/rebon/shop/application/dto/response/ShopSimpleResponseDto.java index cc2412ed..c0764f68 100644 --- a/backend/src/main/java/com/handong/rebon/shop/application/dto/response/ShopSimpleResponseDto.java +++ b/backend/src/main/java/com/handong/rebon/shop/application/dto/response/ShopSimpleResponseDto.java @@ -6,6 +6,7 @@ import com.handong.rebon.auth.domain.LoginMember; import com.handong.rebon.shop.application.dto.response.tag.ShopTagResponseDto; import com.handong.rebon.shop.domain.Shop; +import com.handong.rebon.shop.domain.like.Likes; import lombok.AccessLevel; import lombok.Builder; @@ -33,17 +34,26 @@ public ShopSimpleResponseDto(Long id, String name, double star, boolean like, Li } public static ShopSimpleResponseDto of(Shop shop, LoginMember loginMember) { - List tags = shop.getShopTags().stream() - .map(shopTag -> ShopTagResponseDto.from(shopTag.getTag())) - .collect(Collectors.toList()); return ShopSimpleResponseDto.builder() .id(shop.getId()) .name(shop.getName()) .star(shop.getStar()) .like(shop.containLike(loginMember)) - .tags(tags) + .tags(ShopTagResponseDto.toDtos(shop)) .image(shop.getMainImage()) .build(); } + + public static ShopSimpleResponseDto from(Likes like) { + + return ShopSimpleResponseDto.builder() + .id(like.getShop().getId()) + .name(like.getShop().getName()) + .star(like.getShop().getStar()) + .like(true) + .tags(ShopTagResponseDto.toDtos(like.getShop())) + .image(like.getShop().getMainImage()) + .build(); + } } diff --git a/backend/src/main/java/com/handong/rebon/shop/application/dto/response/tag/ShopTagResponseDto.java b/backend/src/main/java/com/handong/rebon/shop/application/dto/response/tag/ShopTagResponseDto.java index 85326b3d..1632d269 100644 --- a/backend/src/main/java/com/handong/rebon/shop/application/dto/response/tag/ShopTagResponseDto.java +++ b/backend/src/main/java/com/handong/rebon/shop/application/dto/response/tag/ShopTagResponseDto.java @@ -1,5 +1,9 @@ package com.handong.rebon.shop.application.dto.response.tag; +import java.util.List; +import java.util.stream.Collectors; + +import com.handong.rebon.shop.domain.Shop; import com.handong.rebon.tag.domain.Tag; import lombok.AccessLevel; @@ -20,4 +24,10 @@ public ShopTagResponseDto(Long id, String name) { public static ShopTagResponseDto from(Tag tag) { return new ShopTagResponseDto(tag.getId(), tag.getName()); } + + public static List toDtos(Shop shop) { + return shop.getShopTags().stream() + .map(shopTag -> ShopTagResponseDto.from(shopTag.getTag())) + .collect(Collectors.toList()); + } } diff --git a/backend/src/main/java/com/handong/rebon/shop/domain/repository/LikesRepository.java b/backend/src/main/java/com/handong/rebon/shop/domain/repository/LikesRepository.java deleted file mode 100644 index 2891be2e..00000000 --- a/backend/src/main/java/com/handong/rebon/shop/domain/repository/LikesRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.handong.rebon.shop.domain.repository; - -import java.util.List; - -import com.handong.rebon.member.domain.Member; -import com.handong.rebon.shop.domain.like.Likes; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface LikesRepository extends JpaRepository { - List findByMember(Member member); -} diff --git a/backend/src/main/java/com/handong/rebon/shop/presentation/ApiShopController.java b/backend/src/main/java/com/handong/rebon/shop/presentation/ApiShopController.java index ce2c5b85..73d46d9f 100644 --- a/backend/src/main/java/com/handong/rebon/shop/presentation/ApiShopController.java +++ b/backend/src/main/java/com/handong/rebon/shop/presentation/ApiShopController.java @@ -8,12 +8,10 @@ import com.handong.rebon.shop.application.ShopService; import com.handong.rebon.shop.application.dto.request.ShopLikeRequestDto; import com.handong.rebon.shop.application.dto.request.ShopSearchDto; -import com.handong.rebon.shop.application.dto.response.LikeShopResponseDto; import com.handong.rebon.shop.application.dto.response.ShopLikeResponseDto; import com.handong.rebon.shop.application.dto.response.ShopResponseDto; import com.handong.rebon.shop.application.dto.response.ShopSimpleResponseDto; import com.handong.rebon.shop.presentation.dto.request.ShopSearchRequest; -import com.handong.rebon.shop.presentation.dto.response.LikeShopResponse; import com.handong.rebon.shop.presentation.dto.response.ShopLikeResponse; import com.handong.rebon.shop.presentation.dto.response.ShopResponse; import com.handong.rebon.shop.presentation.dto.response.ShopSimpleResponse; @@ -79,8 +77,11 @@ public ResponseEntity unlike( @RequiredLogin @GetMapping("/shops/likes") - public ResponseEntity> getLikeShops(@Login LoginMember loginMember) { - List likeShopDtos = shopService.findLikeShops(loginMember.getId()); - return ResponseEntity.ok(LikeShopResponse.convert(likeShopDtos)); + public ResponseEntity> getLikeShops( + @Login LoginMember loginMember, + @RequestParam Long categoryId + ) { + List responses = shopService.findLikeShops(loginMember.getId(), categoryId); + return ResponseEntity.ok(ShopSimpleResponse.convert(responses)); } } diff --git a/backend/src/main/java/com/handong/rebon/shop/presentation/dto/response/LikeShopResponse.java b/backend/src/main/java/com/handong/rebon/shop/presentation/dto/response/LikeShopResponse.java deleted file mode 100644 index 19a041f1..00000000 --- a/backend/src/main/java/com/handong/rebon/shop/presentation/dto/response/LikeShopResponse.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.handong.rebon.shop.presentation.dto.response; - -import java.util.List; -import java.util.stream.Collectors; - -import com.handong.rebon.shop.application.dto.response.LikeShopResponseDto; -import com.handong.rebon.shop.presentation.dto.response.tag.ShopTagResponse; - -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class LikeShopResponse { - private Long id; - private String name; - private Long categoryId; - private String categoryName; - private double star; - private boolean like; - private List tags; - private String image; - - @Builder - public LikeShopResponse(Long id, String name, Long categoryId, String categoryName, - double star, boolean like, List tags, String image) { - this.id = id; - this.name = name; - this.categoryId = categoryId; - this.categoryName = categoryName; - this.star = star; - this.like = like; - this.tags = tags; - this.image = image; - } - - public static List convert(List responses) { - return responses.stream() - .map(LikeShopResponse::from) - .collect(Collectors.toList()); - } - - public static LikeShopResponse from(LikeShopResponseDto dto) { - List tags = dto.getTags().stream() - .map(ShopTagResponse::from) - .collect(Collectors.toList()); - return LikeShopResponse.builder() - .id(dto.getId()) - .name(dto.getName()) - .star(dto.getStar()) - .categoryId(dto.getCategoryId()) - .categoryName(dto.getCategoryName()) - .like(dto.isLike()) - .tags(tags) - .image(dto.getImage()) - .build(); - } -}