From ab69b70d4da7d41e34912933e6187d7b839b52f1 Mon Sep 17 00:00:00 2001 From: siyeonSon Date: Sun, 11 Jun 2023 19:44:19 +0900 Subject: [PATCH 1/6] :sparkles: feat: check likes in domain logic --- .../main/java/com/depromeet/domains/item/entity/Item.java | 6 ++++++ .../java/com/depromeet/domains/item/entity/ItemLike.java | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java index e1df8c18..849bb95c 100644 --- a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java +++ b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java @@ -61,4 +61,10 @@ public void setItemLocation(ItemLocation itemLocation) { public int getItemLikeCount() { return likes != null ? likes.size() : 0; } + + public boolean isLiked(User user){ + return likes.stream() + .anyMatch(like -> like.isLiked(user)); + } + } diff --git a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/ItemLike.java b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/ItemLike.java index 5d65a19c..1d0ff781 100644 --- a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/ItemLike.java +++ b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/ItemLike.java @@ -30,4 +30,9 @@ public ItemLike(Item item, User user) { this.item = item; this.user = user; } + + public boolean isLiked(User user) { + return user.equals(user); + } + } From 03443acf9b2517e308607ecbd5417a9d382e54ff Mon Sep 17 00:00:00 2001 From: siyeonSon Date: Sun, 11 Jun 2023 20:10:36 +0900 Subject: [PATCH 2/6] :sparkles: chore: return false when likes is null --- .../main/java/com/depromeet/domains/item/entity/Item.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java index 849bb95c..429a6a4d 100644 --- a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java +++ b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java @@ -62,9 +62,9 @@ public int getItemLikeCount() { return likes != null ? likes.size() : 0; } - public boolean isLiked(User user){ - return likes.stream() - .anyMatch(like -> like.isLiked(user)); + public boolean isLiked(User user) { + return likes != null ? + likes.stream().anyMatch(like -> like.isLiked(user)) : false; } } From b458c281fc6e4508862e319a856d8487dd45ce13 Mon Sep 17 00:00:00 2001 From: siyeonSon Date: Sun, 11 Jun 2023 20:11:20 +0900 Subject: [PATCH 3/6] :sparkles: chore: add isLiked on ItemsResponseDto --- .../depromeet/domains/item/dto/response/ItemsResponseDto.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java index 70605ca8..ff06977e 100644 --- a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java +++ b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/dto/response/ItemsResponseDto.java @@ -34,6 +34,9 @@ public record ItemDetailDto( ) LocalDateTime createdAt, + @Schema(description = "아이템 좋아요 여부", example = "true") + boolean isLiked, + @Schema(description = "아이템 좋아요 개수", example = "100") int itemLikeCount ) { @@ -45,6 +48,7 @@ public ItemDetailDto(Item item) { new MusicResponseDto(item), item.getContent(), item.getCreatedAt(), + item.isLiked(item.getUser()), item.getItemLikeCount() ); } From 19c0ab349e776f1e62aedbb3361b2c01a3742e68 Mon Sep 17 00:00:00 2001 From: siyeonSon Date: Sun, 11 Jun 2023 20:13:02 +0900 Subject: [PATCH 4/6] :white_check_mark: test: add isLiked on ItemServiceTest and ItemControllerTest --- .../java/unit/apis/item/controller/ItemControllerTest.java | 2 ++ .../test/java/unit/domains/item/service/ItemServiceTest.java | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/streetdrop-api/src/test/java/unit/apis/item/controller/ItemControllerTest.java b/backend/streetdrop-api/src/test/java/unit/apis/item/controller/ItemControllerTest.java index 7afabfb6..63ce13c3 100644 --- a/backend/streetdrop-api/src/test/java/unit/apis/item/controller/ItemControllerTest.java +++ b/backend/streetdrop-api/src/test/java/unit/apis/item/controller/ItemControllerTest.java @@ -425,6 +425,7 @@ void findNearItemsTestSuccess1() throws Exception { new MusicResponseDto("title", "artist", "/albumImage.jpg", List.of("genre")), "사용자 코멘트", LocalDateTime.of(2023, 5, 26, 12, 0), + false, 1 ) ) @@ -466,6 +467,7 @@ void findNearItemsTestSuccess2() throws Exception { new MusicResponseDto("title", "artist", "/albumImage.jpg", List.of("genre")), "사용자 코멘트", LocalDateTime.of(2023, 5, 26, 12, 0), + false, 1 ) ) diff --git a/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java b/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java index de826048..ec4448dc 100644 --- a/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java +++ b/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java @@ -100,7 +100,7 @@ class FindNearItemsTest { class Success { @DisplayName("특정 지역 주변의 아이템 상세 조회 - 조회 아이템이 없는 경우") @Test - void findNearItemsTestSuccess1() { + void itemNotExist() { NearItemRequestDto nearItemRequestDto = new NearItemRequestDto(127.123, 37.123, 1000.0); when(itemRepository.findNearItemsByDistance(any(Point.class), any(Double.class))).thenReturn(List.of()); @@ -113,7 +113,7 @@ void findNearItemsTestSuccess1() { @DisplayName("특정 지역 주변의 아이템 상세 조회 - 조회 아이템이 2개 있는 경우") @Test - void findNearItemsTestSuccess2() { + void itemsExist() { ItemLocation itemLocation1 = ItemLocation.builder() .name("Location1") .point(GeomUtil.createPoint(37.123, 127.123)) From 49aaaf4fc50a0e7fd26daf90d1c1a412ffaabd21 Mon Sep 17 00:00:00 2001 From: siyeonSon Date: Sun, 11 Jun 2023 20:37:32 +0900 Subject: [PATCH 5/6] :white_check_mark: test: fix test method name --- .../test/java/unit/domains/item/service/ItemServiceTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java b/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java index ec4448dc..de826048 100644 --- a/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java +++ b/backend/streetdrop-core/src/test/java/unit/domains/item/service/ItemServiceTest.java @@ -100,7 +100,7 @@ class FindNearItemsTest { class Success { @DisplayName("특정 지역 주변의 아이템 상세 조회 - 조회 아이템이 없는 경우") @Test - void itemNotExist() { + void findNearItemsTestSuccess1() { NearItemRequestDto nearItemRequestDto = new NearItemRequestDto(127.123, 37.123, 1000.0); when(itemRepository.findNearItemsByDistance(any(Point.class), any(Double.class))).thenReturn(List.of()); @@ -113,7 +113,7 @@ void itemNotExist() { @DisplayName("특정 지역 주변의 아이템 상세 조회 - 조회 아이템이 2개 있는 경우") @Test - void itemsExist() { + void findNearItemsTestSuccess2() { ItemLocation itemLocation1 = ItemLocation.builder() .name("Location1") .point(GeomUtil.createPoint(37.123, 127.123)) From d8e7985528188e1676ef52a828ddf3842627d50d Mon Sep 17 00:00:00 2001 From: siyeonSon Date: Tue, 13 Jun 2023 10:37:58 +0900 Subject: [PATCH 6/6] :recycle: refactor: check if user liked in Item Entity --- .../src/main/java/com/depromeet/domains/item/entity/Item.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java index 429a6a4d..7d58a13d 100644 --- a/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java +++ b/backend/streetdrop-core/src/main/java/com/depromeet/domains/item/entity/Item.java @@ -63,8 +63,7 @@ public int getItemLikeCount() { } public boolean isLiked(User user) { - return likes != null ? - likes.stream().anyMatch(like -> like.isLiked(user)) : false; + return likes != null && likes.stream().anyMatch(like -> like.isLiked(user)); } }