From f8203135b7a7f4d410229db50df9cc080a6209c6 Mon Sep 17 00:00:00 2001 From: sese2204 Date: Mon, 17 Feb 2025 00:10:30 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=A3=BC=EB=B3=80=20=EC=9E=A5?= =?UTF-8?q?=EC=86=8C=EC=99=80=20=EC=A2=8B=EC=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=9E=A5=EC=86=8C=20=EB=B0=98=ED=99=98=20dto=EC=97=90=20likeCo?= =?UTF-8?q?unt=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pickyfy/pickyfy/web/dto/response/NearbyPlaceResponse.java | 2 ++ .../pickyfy/pickyfy/web/dto/response/PlaceSearchResponse.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/pickyfy/pickyfy/web/dto/response/NearbyPlaceResponse.java b/src/main/java/com/pickyfy/pickyfy/web/dto/response/NearbyPlaceResponse.java index 592c97f..cad5fdc 100644 --- a/src/main/java/com/pickyfy/pickyfy/web/dto/response/NearbyPlaceResponse.java +++ b/src/main/java/com/pickyfy/pickyfy/web/dto/response/NearbyPlaceResponse.java @@ -14,6 +14,7 @@ public record NearbyPlaceResponse( String shortDescription, BigDecimal latitude, BigDecimal longitude, + Integer likeCount, String instagramLink, String naverLink, List imageUrls, @@ -47,6 +48,7 @@ public static NearbyPlaceResponse from(Place place) { place.getShortDescription(), place.getLatitude(), place.getLongitude(), + place.getLikeCount(), place.getInstagramLink(), place.getNaverplaceLink(), images, diff --git a/src/main/java/com/pickyfy/pickyfy/web/dto/response/PlaceSearchResponse.java b/src/main/java/com/pickyfy/pickyfy/web/dto/response/PlaceSearchResponse.java index 1871fb3..4386b6a 100644 --- a/src/main/java/com/pickyfy/pickyfy/web/dto/response/PlaceSearchResponse.java +++ b/src/main/java/com/pickyfy/pickyfy/web/dto/response/PlaceSearchResponse.java @@ -20,6 +20,7 @@ public class PlaceSearchResponse{ private String instagramLink; private BigDecimal latitude; private BigDecimal longitude; + private Integer likeCount; private LocalDateTime createdAt; private LocalDateTime updatedAt; private List placeImageUrl; @@ -36,6 +37,7 @@ public static PlaceSearchResponse from(PlaceSearchResponseParams params){ .shortDescription(params.place().getShortDescription()) .latitude(params.place().getLatitude()) .longitude(params.place().getLongitude()) + .likeCount(params.place().getLikeCount()) .createdAt(params.place().getCreatedAt()) .updatedAt(params.place().getUpdatedAt()) .placeImageUrl(params.placeImageUrls()) From ad261bf7ea2e60c79afd1568d3f6e905918ef7cf Mon Sep 17 00:00:00 2001 From: sese2204 Date: Mon, 17 Feb 2025 00:11:03 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat(entity):=20Place=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=EC=97=90=20likeCount=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B3=84=EC=B8=B5=EC=97=90=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/pickyfy/pickyfy/domain/Place.java | 11 +++++++++++ .../com/pickyfy/pickyfy/service/PlaceServiceImpl.java | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/com/pickyfy/pickyfy/domain/Place.java b/src/main/java/com/pickyfy/pickyfy/domain/Place.java index dbaface..13eb963 100644 --- a/src/main/java/com/pickyfy/pickyfy/domain/Place.java +++ b/src/main/java/com/pickyfy/pickyfy/domain/Place.java @@ -47,6 +47,9 @@ public class Place extends BaseTimeEntity { @Column(nullable = false, precision = 11, scale = 8) private BigDecimal longitude; + @Column + private Integer likeCount = 0; + @OneToMany(mappedBy = "place", cascade = CascadeType.ALL) private List userSavedPlaces = new ArrayList<>(); @@ -107,4 +110,12 @@ public void updateImages(List newImages, S3Service s3Service) { .build()); } } + + public void increaseLikeCount() { + this.likeCount++; + } + + public void decreaseLikeCount() { + this.likeCount--; + } } diff --git a/src/main/java/com/pickyfy/pickyfy/service/PlaceServiceImpl.java b/src/main/java/com/pickyfy/pickyfy/service/PlaceServiceImpl.java index d3170f8..076049d 100644 --- a/src/main/java/com/pickyfy/pickyfy/service/PlaceServiceImpl.java +++ b/src/main/java/com/pickyfy/pickyfy/service/PlaceServiceImpl.java @@ -98,9 +98,11 @@ public boolean togglePlaceUser(String email, Long placeId) { return userSavedPlace.map(savedPlace -> { userSavedPlaceRepository.delete(savedPlace); + place.decreaseLikeCount(); return false; }).orElseGet(() -> { userSavedPlaceRepository.save(new UserSavedPlace(user, place)); + place.increaseLikeCount(); return true; }); } @@ -130,6 +132,7 @@ public Long createPlace(PlaceCreateRequest request, List imageLis placeCategoryRepository.save(buildPlaceCategory(category, newPlace)); placeMagazineRepository.save(buildPlaceMagazine(magazine, newPlace)); + List placeImages = new ArrayList<>(); for (int i = 0; i < Math.min(imageList.size(), 5); i++) { String imageUrl = s3Service.upload(imageList.get(i)); From 40545cb46ef1267a1d93951fd8d207796b7b2a25 Mon Sep 17 00:00:00 2001 From: sese2204 Date: Mon, 17 Feb 2025 00:12:15 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat(test):=20=ED=86=A0=EA=B8=80=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EC=8B=9C=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=88=98=20=EB=B3=80=ED=99=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/pickyfy/pickyfy/service/PlaceServiceImplTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/pickyfy/pickyfy/service/PlaceServiceImplTest.java b/src/test/java/com/pickyfy/pickyfy/service/PlaceServiceImplTest.java index e4667eb..ad98488 100644 --- a/src/test/java/com/pickyfy/pickyfy/service/PlaceServiceImplTest.java +++ b/src/test/java/com/pickyfy/pickyfy/service/PlaceServiceImplTest.java @@ -79,6 +79,7 @@ void getUserSavePlace_Success() { assertThat(r.getShortDescription()).isEqualTo("테스트 설명"); assertThat(r.getCategoryName()).isEqualTo("음식점"); assertThat(r.getMagazineTitle()).isEqualTo("테스트 매거진"); + assertThat(r.getLikeCount()).isEqualTo(0); assertThat(r.getPlaceImageUrl()).containsExactly("test-image-url.jpg"); assertThat(r.getInstagramLink()).isEqualTo("instagram.com"); assertThat(r.getNaverLink()).isEqualTo("naver.com"); @@ -145,9 +146,11 @@ void togglePlaceUser_Success() { // Then assertThat(firstToggle).isTrue(); assertThat(userSavedPlaceRepository.findByUserIdAndPlaceId(user.getId(), place.getId())).isPresent(); + assertThat(place.getLikeCount()).isEqualTo(1); // When - 두 번째 토글 (저장 취소) boolean secondToggle = placeService.togglePlaceUser(user.getEmail(), place.getId()); + assertThat(place.getLikeCount()).isEqualTo(0); // Then assertThat(secondToggle).isFalse();