From 65b3235518740c9c25c15478762129830e61cc98 Mon Sep 17 00:00:00 2001 From: lsh328328 Date: Wed, 19 Jul 2023 21:10:17 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]:=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=B7=A8=EC=86=8C=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../travel/controller/TravelController.java | 11 +++++------ .../dto/response/LikeCountResponseDto.java | 18 ++++++++++++++++++ .../infrastructure/LikeTravelRepository.java | 2 ++ .../Travalue/travel/service/TravelService.java | 11 +++++++++-- 4 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/deploy/Travalue/travel/controller/dto/response/LikeCountResponseDto.java diff --git a/src/main/java/com/deploy/Travalue/travel/controller/TravelController.java b/src/main/java/com/deploy/Travalue/travel/controller/TravelController.java index 87bd52d..aa85a79 100644 --- a/src/main/java/com/deploy/Travalue/travel/controller/TravelController.java +++ b/src/main/java/com/deploy/Travalue/travel/controller/TravelController.java @@ -6,6 +6,7 @@ import com.deploy.Travalue.exception.SuccessCode; import com.deploy.Travalue.external.client.aws.S3Service; import com.deploy.Travalue.travel.controller.dto.request.TravellerRequestDto; +import com.deploy.Travalue.travel.controller.dto.response.LikeCountResponseDto; import com.deploy.Travalue.travel.domain.TravelContentInfoVO; import com.deploy.Travalue.travel.service.TravelService; import com.deploy.Travalue.travel.service.dto.response.HotTravellersResponseDto; @@ -134,16 +135,14 @@ public ApiResponse> getHotTravellers() { @Auth @ApiOperation("게시물 좋아요 API") @PostMapping("/{postId}/like") - public ApiResponse travelLike(@UserId Long userId, @PathVariable Long postId) { - travelService.travelLike(userId, postId); - return ApiResponse.success(SuccessCode.LIKE_TRAVEL_SUCCESS); + public ApiResponse travelLike(@UserId Long userId, @PathVariable Long postId) { + return ApiResponse.success(SuccessCode.LIKE_TRAVEL_SUCCESS, travelService.travelLike(userId, postId)); } @Auth @ApiOperation("게시물 좋아요 취소 API") @DeleteMapping("{postId}/unlike") - public ApiResponse travelUnlike(@UserId Long userId, @PathVariable Long postId) { - travelService.travelUnlike(userId, postId); - return ApiResponse.success(SuccessCode.UNLIKE_TRAVEL_SUCCESS); + public ApiResponse travelUnlike(@UserId Long userId, @PathVariable Long postId) { + return ApiResponse.success(SuccessCode.UNLIKE_TRAVEL_SUCCESS, travelService.travelUnlike(userId, postId)); } } diff --git a/src/main/java/com/deploy/Travalue/travel/controller/dto/response/LikeCountResponseDto.java b/src/main/java/com/deploy/Travalue/travel/controller/dto/response/LikeCountResponseDto.java new file mode 100644 index 0000000..abd8eb6 --- /dev/null +++ b/src/main/java/com/deploy/Travalue/travel/controller/dto/response/LikeCountResponseDto.java @@ -0,0 +1,18 @@ +package com.deploy.Travalue.travel.controller.dto.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class LikeCountResponseDto { + + private Long likeCount; + + public static LikeCountResponseDto of(Long likeCount) { + return new LikeCountResponseDto(likeCount); + } +} diff --git a/src/main/java/com/deploy/Travalue/travel/infrastructure/LikeTravelRepository.java b/src/main/java/com/deploy/Travalue/travel/infrastructure/LikeTravelRepository.java index aaeff59..34fe1f6 100644 --- a/src/main/java/com/deploy/Travalue/travel/infrastructure/LikeTravelRepository.java +++ b/src/main/java/com/deploy/Travalue/travel/infrastructure/LikeTravelRepository.java @@ -14,4 +14,6 @@ public interface LikeTravelRepository extends JpaRepository, L int countLikeTravelByTravelId(Long travelId); boolean existsByTravelIdAndUserId(Long travelId, Long userId); + + Long countByTravelId(Long travelId); } \ No newline at end of file diff --git a/src/main/java/com/deploy/Travalue/travel/service/TravelService.java b/src/main/java/com/deploy/Travalue/travel/service/TravelService.java index 6684bd1..c342eae 100644 --- a/src/main/java/com/deploy/Travalue/travel/service/TravelService.java +++ b/src/main/java/com/deploy/Travalue/travel/service/TravelService.java @@ -5,6 +5,7 @@ import com.deploy.Travalue.exception.model.UnauthorizedException; import com.deploy.Travalue.external.client.aws.S3Service; import com.deploy.Travalue.travel.controller.dto.request.TravellerRequestDto; +import com.deploy.Travalue.travel.controller.dto.response.LikeCountResponseDto; import com.deploy.Travalue.travel.domain.*; import com.deploy.Travalue.travel.infrastructure.*; import com.deploy.Travalue.travel.service.dto.response.*; @@ -335,7 +336,7 @@ public List getHotTravellers() { } @Transactional - public void travelLike(Long userId, Long postId) { + public LikeCountResponseDto travelLike(Long userId, Long postId) { final User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException("존재하지 않는 유저입니다.")); @@ -347,10 +348,13 @@ public void travelLike(Long userId, Long postId) { } likeTravelRepository.save(LikeTravel.newInstance(user, travel)); + Long likeCount = likeTravelRepository.countByTravelId(travel.getId()); + + return LikeCountResponseDto.of(likeCount); } @Transactional - public void travelUnlike(Long userId, Long postId) { + public LikeCountResponseDto travelUnlike(Long userId, Long postId) { final User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException("존재하지 않는 유저입니다.")); @@ -361,5 +365,8 @@ public void travelUnlike(Long userId, Long postId) { .orElseThrow(() -> new NotFoundException("좋아요를 누른 적이 없는 게시글입니다.")); likeTravelRepository.deleteById(likeTravel.getId()); + Long likeCount = likeTravelRepository.countByTravelId(travel.getId()); + + return LikeCountResponseDto.of(likeCount); } }