From 1a6ffad6fa29b36f096e401fa5b72ea00a4bbd0e Mon Sep 17 00:00:00 2001 From: Jung Seonghun <80201773+seonghun-dev@users.noreply.github.com> Date: Fri, 21 Jul 2023 02:13:44 +0900 Subject: [PATCH] :ambulance: hotfix(api): cannot get like issue fix --- .../item/dto/response/ItemsResponseDto.java | 4 +-- .../item/repository/ItemRepository.java | 2 +- .../domains/item/service/ItemService.java | 32 ++++++++----------- .../unit/item/service/ItemServiceTest.java | 4 +-- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java b/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java index 2fe0f99f..b0c0ec54 100644 --- a/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java +++ b/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java @@ -40,7 +40,7 @@ public record ItemDetailDto( @Schema(description = "아이템 좋아요 개수", example = "100") int itemLikeCount ) { - public ItemDetailDto(Item item) { + public ItemDetailDto(Item item, Boolean isLiked) { this( item.getId(), new UserResponseDto(item.getUser()), @@ -48,7 +48,7 @@ public ItemDetailDto(Item item) { new MusicResponseDto(item), item.getContent(), item.getCreatedAt(), - item.isLiked(item.getUser()), + isLiked, item.getItemLikeCount() ); } diff --git a/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/repository/ItemRepository.java b/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/repository/ItemRepository.java index 691cfcbc..8d476922 100644 --- a/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/repository/ItemRepository.java +++ b/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/repository/ItemRepository.java @@ -14,7 +14,7 @@ public interface ItemRepository extends JpaRepository { @Query("SELECT i FROM Item i " + - "JOIN ItemLocation il on il.item.id = i.id " + + "JOIN FETCH i.itemLocation il " + "WHERE ST_Distance_Sphere(il.point, :point) <= :distance") List findNearItemsByDistance(@Param("point") Point point, @Param("distance") Double distance); diff --git a/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/service/ItemService.java b/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/service/ItemService.java index 0ef2d272..20d88b8e 100644 --- a/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/service/ItemService.java +++ b/backend/streetdrop-api/src/main/java/com/depromeet/domains/item/service/ItemService.java @@ -103,24 +103,20 @@ public ItemDetailResponseDto findOneItem(User user, Long itemId) { @Transactional(readOnly = true) public ItemsResponseDto findNearItems(User user, NearItemRequestDto nearItemRequestDto) { - Point point = GeomUtil.createPoint(nearItemRequestDto.getLongitude(), nearItemRequestDto.getLatitude()); - var items = itemRepository.findNearItemsByDistance(point, nearItemRequestDto.getDistance()); - - if (user != null) { - final List blockedUserIds = getBlockedUserIds(user); - var itemDetailDtoList = items.stream() - .filter((item) -> !blockedUserIds.contains(item.getUser().getId())) - .map(ItemsResponseDto.ItemDetailDto::new) - .toList(); - return new ItemsResponseDto(itemDetailDtoList); - } else { - final List blockedUserIds = new ArrayList<>(); - var itemDetailDtoList = items.stream() - .map(ItemsResponseDto.ItemDetailDto::new) - .toList(); - return new ItemsResponseDto(itemDetailDtoList); - } - } + Point point = GeomUtil.createPoint(nearItemRequestDto.getLongitude(), nearItemRequestDto.getLatitude()); + var items = itemRepository.findNearItemsByDistance(point, nearItemRequestDto.getDistance()); + + final List blockedUserIds = getBlockedUserIds(user); + var itemDetailDtoList = items.stream() + .filter((item) -> !blockedUserIds.contains(item.getUser().getId())) + .map(item -> + { + Boolean isLiked = itemLikeRepository.existsByUserIdAndItemId(user.getId(), item.getId()); + return new ItemsResponseDto.ItemDetailDto(item, isLiked); + }) + .toList(); + return new ItemsResponseDto(itemDetailDtoList); + } private List getBlockedUserIds(User user) { return blockUserRepository.findBlockedIdsByBlockerId(user.getId()); diff --git a/backend/streetdrop-api/src/test/java/unit/item/service/ItemServiceTest.java b/backend/streetdrop-api/src/test/java/unit/item/service/ItemServiceTest.java index 2d6d9dc9..0317ebee 100644 --- a/backend/streetdrop-api/src/test/java/unit/item/service/ItemServiceTest.java +++ b/backend/streetdrop-api/src/test/java/unit/item/service/ItemServiceTest.java @@ -193,8 +193,8 @@ void findNearItemsTestSuccess2() { var result = itemService.findNearItems(null, nearItemRequestDto); var expected = new ItemsResponseDto( List.of( - new ItemsResponseDto.ItemDetailDto(item1), - new ItemsResponseDto.ItemDetailDto(item2) + new ItemsResponseDto.ItemDetailDto(item1, true), + new ItemsResponseDto.ItemDetailDto(item2, true) ) ); assertThat(result).isEqualTo(expected);