From ecc5e88d5d7a8100233a23d623f81035def83247 Mon Sep 17 00:00:00 2001 From: kimdongmin Date: Sun, 21 Jan 2024 22:54:08 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[refactor]=20PlaceReviewController=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9D=B8=EB=9D=BC=EC=9D=B8=20&=20?= =?UTF-8?q?=EC=97=AC=ED=96=89=20=ED=9B=84=EA=B8=B0=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=EC=97=90=20=EB=B3=B5=EC=88=98?= =?UTF-8?q?=ED=98=95=20's'=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PlaceReviewController.java | 12 +++++++----- .../placereview/service/PlaceReviewService.java | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java index 7e46b2be..4abf6482 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java @@ -74,7 +74,8 @@ public ResponseEntity>> getPlaceReviewL public ResponseEntity> modifyPlaceReview( @AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long placeReviewId, - @RequestBody @Validated PlaceReviewRequestDto requestDto) { + @RequestBody @Validated PlaceReviewRequestDto requestDto + ) { PlaceReviewResponseDto responseDto = placeReviewService .modifyPlaceReview(principalDetails, placeReviewId, requestDto); @@ -82,12 +83,12 @@ public ResponseEntity> modifyPlaceReview( } //todo : 로그인한 사람이 맞는지 확인 - //todo : 복수형 s 붙이기가 @DeleteMapping("/reviews") - public ResponseEntity> removePlaceReview( - @RequestBody DeletePlaceReviewRequestDto requestDto) { + public ResponseEntity> removePlaceReviews( + @RequestBody DeletePlaceReviewRequestDto requestDto + ) { - DeletePlaceReviewResponseDto responseDto = placeReviewService.deletePlaceReview(requestDto); + DeletePlaceReviewResponseDto responseDto = placeReviewService.deletePlaceReviews(requestDto); if (responseDto instanceof DeleteSomeFailurePlaceReviewResponseDto) { return ResponseEntity @@ -103,6 +104,7 @@ public ResponseEntity>> getMyPlaceR @AuthenticationPrincipal PrincipalDetails principalDetails, Pageable pageable ) { + List responseDtos = placeReviewService.getMyPlaceReviewsList(principalDetails, pageable); ResponseDTO> responseBody diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java index f775b95b..4e764b0c 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java @@ -137,7 +137,7 @@ public PlaceReviewResponseDto modifyPlaceReview( } @Transactional - public DeletePlaceReviewResponseDto deletePlaceReview(DeletePlaceReviewRequestDto requestDto) { + public DeletePlaceReviewResponseDto deletePlaceReviews(DeletePlaceReviewRequestDto requestDto) { List placeReviewIds = requestDto.placeReviewIds(); List failedIds = new ArrayList<>(); From a9d955eeaf1760b3c23ec9e3343ba999a701bb47 Mon Sep 17 00:00:00 2001 From: kimdongmin Date: Sun, 21 Jan 2024 23:00:18 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[refactor]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=9D=BC=EB=B6=80=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EC=84=B1=EA=B3=B5=EC=8B=9C=20=EC=83=81=ED=83=9C=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20207=EC=97=90=EC=84=9C=20200=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PlaceReviewController.java | 24 +++++++------------ .../service/PlaceReviewService.java | 4 +++- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java index 4abf6482..18f7bc38 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java @@ -6,7 +6,6 @@ import com.haejwo.tripcometrue.domain.review.placereview.dto.response.PlaceReviewResponseDto; import com.haejwo.tripcometrue.domain.review.placereview.dto.response.RegisterPlaceReviewResponseDto; import com.haejwo.tripcometrue.domain.review.placereview.dto.response.delete.DeletePlaceReviewResponseDto; -import com.haejwo.tripcometrue.domain.review.placereview.dto.response.delete.DeleteSomeFailurePlaceReviewResponseDto; import com.haejwo.tripcometrue.domain.review.placereview.service.PlaceReviewService; import com.haejwo.tripcometrue.global.springsecurity.PrincipalDetails; import com.haejwo.tripcometrue.global.util.ResponseDTO; @@ -23,7 +22,6 @@ import java.util.List; import static org.springframework.http.HttpStatus.CREATED; -import static org.springframework.http.HttpStatus.MULTI_STATUS; @Slf4j @RestController @@ -88,30 +86,24 @@ public ResponseEntity> removePlaceRevi @RequestBody DeletePlaceReviewRequestDto requestDto ) { - DeletePlaceReviewResponseDto responseDto = placeReviewService.deletePlaceReviews(requestDto); - - if (responseDto instanceof DeleteSomeFailurePlaceReviewResponseDto) { - return ResponseEntity - .status(MULTI_STATUS) - .body(ResponseDTO.errorWithData(MULTI_STATUS, responseDto)); - } - + DeletePlaceReviewResponseDto responseDto = + placeReviewService.deletePlaceReviews(requestDto); return ResponseEntity.ok(ResponseDTO.okWithData(responseDto)); } @GetMapping("/reviews/my") public ResponseEntity>> getMyPlaceReviews( - @AuthenticationPrincipal PrincipalDetails principalDetails, - Pageable pageable + @AuthenticationPrincipal PrincipalDetails principalDetails, + Pageable pageable ) { List responseDtos - = placeReviewService.getMyPlaceReviewsList(principalDetails, pageable); + = placeReviewService.getMyPlaceReviewsList(principalDetails, pageable); ResponseDTO> responseBody - = ResponseDTO.okWithData(responseDtos); + = ResponseDTO.okWithData(responseDtos); return ResponseEntity - .status(HttpStatus.OK) - .body(responseBody); + .status(HttpStatus.OK) + .body(responseBody); } } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java index 4e764b0c..c64ffcf8 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java @@ -137,7 +137,9 @@ public PlaceReviewResponseDto modifyPlaceReview( } @Transactional - public DeletePlaceReviewResponseDto deletePlaceReviews(DeletePlaceReviewRequestDto requestDto) { + public DeletePlaceReviewResponseDto deletePlaceReviews( + DeletePlaceReviewRequestDto requestDto + ) { List placeReviewIds = requestDto.placeReviewIds(); List failedIds = new ArrayList<>(); From 4e573fc57be62ec68545c354e575eb1e1c34985b Mon Sep 17 00:00:00 2001 From: kimdongmin Date: Mon, 22 Jan 2024 00:14:06 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[refactor]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EB=AA=A9=EB=A1=9D=20=EB=B0=8F=20My=20?= =?UTF-8?q?=EC=97=AC=ED=96=89=EC=A7=80=20=EB=A6=AC=EB=B7=B0=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EB=B0=98=ED=99=98=20DTO?= =?UTF-8?q?=EB=A5=BC=20TripRecordReviewListResponseDto=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PlaceReviewController.java | 42 ++++++-------- .../response/PlaceReviewListResponseDto.java | 38 ++++++------ .../repository/PlaceReviewRepository.java | 6 +- .../service/PlaceReviewService.java | 58 +++++++++++++------ 4 files changed, 80 insertions(+), 64 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java index 18f7bc38..0a8d52f4 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/controller/PlaceReviewController.java @@ -11,16 +11,12 @@ import com.haejwo.tripcometrue.global.util.ResponseDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.List; - import static org.springframework.http.HttpStatus.CREATED; @Slf4j @@ -56,18 +52,6 @@ public ResponseEntity> getOnePlaceReview( return ResponseEntity.ok(ResponseDTO.okWithData(responseDto)); } - @GetMapping("/{placeId}/reviews") - public ResponseEntity>> getPlaceReviewList( - @AuthenticationPrincipal PrincipalDetails principalDetails, - @PathVariable Long placeId, - @RequestParam(defaultValue = "false") boolean onlyImage, - Pageable pageable - ) { - - Page responseDtos = placeReviewService.getPlaceReviews(principalDetails, placeId, onlyImage, pageable); - return ResponseEntity.ok(ResponseDTO.okWithData(responseDtos)); - } - @PutMapping("/reviews/{placeReviewId}") public ResponseEntity> modifyPlaceReview( @AuthenticationPrincipal PrincipalDetails principalDetails, @@ -91,19 +75,27 @@ public ResponseEntity> removePlaceRevi return ResponseEntity.ok(ResponseDTO.okWithData(responseDto)); } - @GetMapping("/reviews/my") - public ResponseEntity>> getMyPlaceReviews( + @GetMapping("/{placeId}/reviews") + public ResponseEntity> getPlaceReviewList( @AuthenticationPrincipal PrincipalDetails principalDetails, + @PathVariable Long placeId, + @RequestParam(defaultValue = "false") boolean onlyImage, Pageable pageable ) { - List responseDtos - = placeReviewService.getMyPlaceReviewsList(principalDetails, pageable); - ResponseDTO> responseBody - = ResponseDTO.okWithData(responseDtos); + PlaceReviewListResponseDto responseDtos = + placeReviewService.getPlaceReviewList(principalDetails, placeId, onlyImage, pageable); + return ResponseEntity.ok(ResponseDTO.okWithData(responseDtos)); + } - return ResponseEntity - .status(HttpStatus.OK) - .body(responseBody); + @GetMapping("/reviews/my") + public ResponseEntity> getMyPlaceReviews( + @AuthenticationPrincipal PrincipalDetails principalDetails, + Pageable pageable + ) { + + PlaceReviewListResponseDto responseDtos + = placeReviewService.getMyPlaceReviewList(principalDetails, pageable); + return ResponseEntity.ok((ResponseDTO.okWithData(responseDtos))); } } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/dto/response/PlaceReviewListResponseDto.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/dto/response/PlaceReviewListResponseDto.java index 3e4f24b5..df42fdaa 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/dto/response/PlaceReviewListResponseDto.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/dto/response/PlaceReviewListResponseDto.java @@ -1,29 +1,29 @@ package com.haejwo.tripcometrue.domain.review.placereview.dto.response; import com.haejwo.tripcometrue.domain.review.placereview.entity.PlaceReview; +import org.springframework.data.domain.Page; -import java.time.LocalDateTime; +import java.util.List; public record PlaceReviewListResponseDto( - Long id, - String content, - String imageUrl, - Integer likeCount, - Long memberId, - Long placeId, - LocalDateTime createdAt + Long totalCount, + int nowPageNumber, + boolean isFirst, + boolean isLast, + List placeReviews ) { - public static PlaceReviewListResponseDto fromEntity(PlaceReview placeReview) { - return new PlaceReviewListResponseDto( - placeReview.getId(), - placeReview.getContent(), - placeReview.getImageUrl(), - placeReview.getLikeCount(), - placeReview.getMember().getId(), - placeReview.getPlace().getId(), - placeReview.getCreatedAt() - ); - } + public static PlaceReviewListResponseDto fromResponseDtos( + Page reviews, + List placeReviews + ) { + return new PlaceReviewListResponseDto( + reviews.getTotalElements(), + reviews.getNumber(), + reviews.isFirst(), + reviews.isLast(), + placeReviews + ); + } } \ No newline at end of file diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java index 081d08ad..0aa00c2b 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java @@ -3,8 +3,11 @@ import com.haejwo.tripcometrue.domain.member.entity.Member; import com.haejwo.tripcometrue.domain.place.entity.Place; import com.haejwo.tripcometrue.domain.review.placereview.entity.PlaceReview; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -14,5 +17,6 @@ public interface PlaceReviewRepository extends JpaRepository, boolean existsByMemberAndPlace(Member member, Place place); - List findByMemberId(Long memberId, Pageable pageable); + @Query("select pr from PlaceReview pr join fetch pr.member m where pr.member = :member order by pr.createdAt desc") + Page findByMember(@Param("member") Member member, Pageable pageable); } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java index c64ffcf8..ccd19940 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java @@ -2,6 +2,8 @@ import com.haejwo.tripcometrue.domain.likes.entity.PlaceReviewLikes; import com.haejwo.tripcometrue.domain.member.entity.Member; +import com.haejwo.tripcometrue.domain.member.exception.UserNotFoundException; +import com.haejwo.tripcometrue.domain.member.repository.MemberRepository; import com.haejwo.tripcometrue.domain.place.entity.Place; import com.haejwo.tripcometrue.domain.place.exception.PlaceNotFoundException; import com.haejwo.tripcometrue.domain.place.repositroy.PlaceRepository; @@ -29,7 +31,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; @Slf4j @Service @@ -39,6 +40,7 @@ public class PlaceReviewService { private final PlaceReviewRepository placeReviewRepository; private final PlaceRepository placeRepository; + private final MemberRepository memberRepository; private final EntityManager em; @Transactional @@ -113,16 +115,6 @@ private boolean hasLikedPlaceReview(PrincipalDetails principalDetails, PlaceRevi return memberIds.contains(principalDetails.getMember().getId()); } - public Page getPlaceReviews(PrincipalDetails principalDetails, Long placeId, boolean onlyImage, Pageable pageable) { - - Place place = getPlaceById(placeId); - Page placeReviews = placeReviewRepository.findByPlace(place, onlyImage, pageable); - - return placeReviews.map(placeReview -> - PlaceReviewResponseDto.fromEntity(placeReview, hasLikedPlaceReview(principalDetails, placeReview)) - ); - } - @Transactional public PlaceReviewResponseDto modifyPlaceReview( PrincipalDetails principalDetails, @@ -166,14 +158,42 @@ private boolean isDeleteAllFail(List placeReviewIds, List failedIds) return placeReviewIds.size() == failedIds.size(); } - @Transactional(readOnly = true) - public List getMyPlaceReviewsList( - PrincipalDetails principalDetails, Pageable pageable) { - Long memberId = principalDetails.getMember().getId(); - List reviews = placeReviewRepository.findByMemberId(memberId, pageable); + public PlaceReviewListResponseDto getPlaceReviewList( + PrincipalDetails principalDetails, + Long placeId, + boolean onlyImage, + Pageable pageable + ) { + + Place place = getPlaceById(placeId); + Page reviews = placeReviewRepository.findByPlace(place, onlyImage, pageable); + + return PlaceReviewListResponseDto.fromResponseDtos( + reviews, + reviews.map(placeReview -> PlaceReviewResponseDto.fromEntity( + placeReview, + hasLikedPlaceReview(principalDetails, placeReview)) + ).toList()); + } + + public PlaceReviewListResponseDto getMyPlaceReviewList( + PrincipalDetails principalDetails, + Pageable pageable + ) { + + Member loginMember = getMember(principalDetails); + Page reviews = placeReviewRepository.findByMember(loginMember, pageable); + + return PlaceReviewListResponseDto.fromResponseDtos( + reviews, + reviews.map(placeReview -> PlaceReviewResponseDto.fromEntity( + placeReview, + hasLikedPlaceReview(principalDetails, placeReview)) + ).toList()); + } - return reviews.stream() - .map(PlaceReviewListResponseDto::fromEntity) - .collect(Collectors.toList()); + private Member getMember(PrincipalDetails principalDetails) { + return memberRepository.findById(principalDetails.getMember().getId()) + .orElseThrow(UserNotFoundException::new); } } From c8bd99153bc4505c16298d687db2b9b739aea2ec Mon Sep 17 00:00:00 2001 From: kimdongmin Date: Mon, 22 Jan 2024 00:14:48 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[refactor]=20TripRecordReview=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EA=B3=84=EC=B8=B5=EC=9D=98=20My=20?= =?UTF-8?q?=EC=97=AC=ED=96=89=20=ED=9B=84=EA=B8=B0=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TripRecordReviewService.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/triprecordreview/service/TripRecordReviewService.java b/src/main/java/com/haejwo/tripcometrue/domain/review/triprecordreview/service/TripRecordReviewService.java index e9a804e7..67bf3c63 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/triprecordreview/service/TripRecordReviewService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/triprecordreview/service/TripRecordReviewService.java @@ -143,22 +143,6 @@ private void isReviewAlreadyRegister(TripRecordReview tripRecordReview) { } } - public TripRecordReviewListResponseDto getMyTripRecordReviewList( - PrincipalDetails principalDetails, - Pageable pageable - ) { - - Page reviews = tripRecordReviewRepository.findByMember(getMember(principalDetails), pageable); - - List responseDtos = - reviews.map(tripRecordReview -> TripRecordReviewResponseDto.fromEntity( - tripRecordReview, - hasLikedTripRecordReview(principalDetails, tripRecordReview)) - ).toList(); - - return TripRecordReviewListResponseDto.fromResponseDtos(reviews, responseDtos); - } - @Transactional public DeleteTripRecordReviewResponseDto deleteTripRecordReviews( DeleteTripRecordReviewRequestDto requestDto @@ -236,4 +220,20 @@ public TripRecordReviewListResponseDto getTripRecordReviewList( hasLikedTripRecordReview(principalDetails, tripRecordReview)) ).toList()); } + + public TripRecordReviewListResponseDto getMyTripRecordReviewList( + PrincipalDetails principalDetails, + Pageable pageable + ) { + + Member loginMember = getMember(principalDetails); + Page reviews = tripRecordReviewRepository.findByMember(loginMember, pageable); + + return TripRecordReviewListResponseDto.fromResponseDtos( + reviews, + reviews.map(tripRecordReview -> TripRecordReviewResponseDto.fromEntity( + tripRecordReview, + hasLikedTripRecordReview(principalDetails, tripRecordReview)) + ).toList()); + } } From d91c36b137b19757a21659bbc8dc0c67062a124b Mon Sep 17 00:00:00 2001 From: kimdongmin Date: Mon, 22 Jan 2024 00:47:19 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[refactor]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0(TripReview)=20=EC=A0=80=EC=9E=A5=20=EB=B0=8F?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=EC=8B=9C=20=EB=B3=B8=EB=AC=B8=EA=B3=BC=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=9C=A0=EB=AC=B4=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EC=A0=81=EB=A6=BD=20=EB=B0=A9=EC=A7=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../placereview/entity/PlaceReview.java | 20 ++++++++- .../repository/PlaceReviewRepository.java | 2 - .../service/PlaceReviewService.java | 42 +++++++------------ 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/entity/PlaceReview.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/entity/PlaceReview.java index 373df44b..ed7069cf 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/entity/PlaceReview.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/entity/PlaceReview.java @@ -14,6 +14,8 @@ import java.util.ArrayList; import java.util.List; +import static com.haejwo.tripcometrue.domain.review.global.PointType.ONLY_ONE_POINT; +import static com.haejwo.tripcometrue.domain.review.global.PointType.TWO_POINTS; import static jakarta.persistence.FetchType.LAZY; @Getter @@ -43,6 +45,7 @@ public class PlaceReview extends BaseTimeEntity { private String imageUrl; private Integer likeCount; private Integer commentCount; + private boolean hasAnyRegisteredPhotoUrl; @Builder public PlaceReview(Member member, Place place, String content, String imageUrl) { @@ -52,8 +55,23 @@ public PlaceReview(Member member, Place place, String content, String imageUrl) this.imageUrl = imageUrl; } - public void update(PlaceReviewRequestDto requestDto) { + public void save(PlaceReviewRequestDto requestDto, Member member) { + if (requestDto.imageUrl() != null) { + member.earnPoint(TWO_POINTS.getPoint()); + hasAnyRegisteredPhotoUrl = true; + return; + } + + member.earnPoint(ONLY_ONE_POINT.getPoint()); + } + + public void update(PlaceReviewRequestDto requestDto, Member member) { this.content = requestDto.content(); + + if (!hasAnyRegisteredPhotoUrl && requestDto.imageUrl() != null) { + member.earnPoint(ONLY_ONE_POINT.getPoint()); + hasAnyRegisteredPhotoUrl = true; + } this.imageUrl = requestDto.imageUrl(); } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java index 0aa00c2b..739d8776 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/repository/PlaceReviewRepository.java @@ -10,8 +10,6 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.util.List; - @Repository public interface PlaceReviewRepository extends JpaRepository, PlaceReviewRepositoryCustom { diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java index ccd19940..899719b8 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java @@ -21,7 +21,6 @@ import com.haejwo.tripcometrue.domain.review.placereview.exception.PlaceReviewNotFoundException; import com.haejwo.tripcometrue.domain.review.placereview.repository.PlaceReviewRepository; import com.haejwo.tripcometrue.global.springsecurity.PrincipalDetails; -import jakarta.persistence.EntityManager; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -41,29 +40,29 @@ public class PlaceReviewService { private final PlaceReviewRepository placeReviewRepository; private final PlaceRepository placeRepository; private final MemberRepository memberRepository; - private final EntityManager em; @Transactional public RegisterPlaceReviewResponseDto savePlaceReview( PrincipalDetails principalDetails, Long placeId, - PlaceReviewRequestDto requestDto) { + PlaceReviewRequestDto requestDto + ) { - Member member = getPersistentMember(principalDetails); + Member loginMember = getMember(principalDetails); Place place = getPlaceById(placeId); - isPlaceReviewExists(member, place); + isAlreadyPlaceReviewExists(loginMember, place); - PlaceReview placeReview = PlaceReviewRequestDto.toEntity(member, place, requestDto); - -// calculateAndSavePoints(placeReview, member); + PlaceReview placeReview = PlaceReviewRequestDto.toEntity(loginMember, place, requestDto); + placeReview.save(requestDto, loginMember); return RegisterPlaceReviewResponseDto .fromEntity(placeReviewRepository.save(placeReview)); } - private Member getPersistentMember(PrincipalDetails principalDetails) { - return em.merge(principalDetails.getMember()); //준영속 상태를 영속 상태로 변경 + private Member getMember(PrincipalDetails principalDetails) { + return memberRepository.findById(principalDetails.getMember().getId()) + .orElseThrow(UserNotFoundException::new); } private Place getPlaceById(Long placeId) { @@ -71,21 +70,12 @@ private Place getPlaceById(Long placeId) { .orElseThrow(PlaceNotFoundException::new); } - private void isPlaceReviewExists(Member member, Place place) { + private void isAlreadyPlaceReviewExists(Member member, Place place) { if (placeReviewRepository.existsByMemberAndPlace(member, place)) { throw new PlaceReviewAlreadyExistsException(); } } -// private void calculateAndSavePoints(PlaceReview placeReview, Member member) { -// int point = isImageIncluded(placeReview) ? CONTENT_WITH_IMAGE_POINT.getPoint() : ONLY_CONTENT_POINT.getPoint(); -// member.earnPoint(point); -// } -// -// private boolean isImageIncluded(PlaceReview placeReview) { -// return placeReview.getImageUrl() != null; -// } - public PlaceReviewResponseDto getPlaceReview(PrincipalDetails principalDetails, Long placeReviewId) { PlaceReview placeReview = getPlaceReviewById(placeReviewId); @@ -119,10 +109,13 @@ private boolean hasLikedPlaceReview(PrincipalDetails principalDetails, PlaceRevi public PlaceReviewResponseDto modifyPlaceReview( PrincipalDetails principalDetails, Long placeReviewId, - PlaceReviewRequestDto requestDto) { + PlaceReviewRequestDto requestDto + ) { + Member loginMember = getMember(principalDetails); PlaceReview placeReview = getPlaceReviewById(placeReviewId); - placeReview.update(requestDto); + + placeReview.update(requestDto, loginMember); return PlaceReviewResponseDto .fromEntity(placeReview, hasLikedPlaceReview(principalDetails, placeReview)); @@ -191,9 +184,4 @@ public PlaceReviewListResponseDto getMyPlaceReviewList( hasLikedPlaceReview(principalDetails, placeReview)) ).toList()); } - - private Member getMember(PrincipalDetails principalDetails) { - return memberRepository.findById(principalDetails.getMember().getId()) - .orElseThrow(UserNotFoundException::new); - } } From 5554f7f7caeedcf8d6997fef44d6314ea52dbc83 Mon Sep 17 00:00:00 2001 From: kimdongmin Date: Mon, 22 Jan 2024 00:54:35 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[feat]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EC=97=AC=ED=96=89?= =?UTF-8?q?=EC=A7=80=20=EB=A6=AC=EB=B7=B0(TripReview)=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EC=8B=9C=EB=8F=84=EC=8B=9C=20=EC=98=88=EC=99=B8=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/placereview/service/PlaceReviewService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java index 899719b8..fb98e28a 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/review/placereview/service/PlaceReviewService.java @@ -2,6 +2,7 @@ import com.haejwo.tripcometrue.domain.likes.entity.PlaceReviewLikes; import com.haejwo.tripcometrue.domain.member.entity.Member; +import com.haejwo.tripcometrue.domain.member.exception.UserInvalidAccessException; import com.haejwo.tripcometrue.domain.member.exception.UserNotFoundException; import com.haejwo.tripcometrue.domain.member.repository.MemberRepository; import com.haejwo.tripcometrue.domain.place.entity.Place; @@ -30,6 +31,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Slf4j @Service @@ -115,12 +117,19 @@ public PlaceReviewResponseDto modifyPlaceReview( Member loginMember = getMember(principalDetails); PlaceReview placeReview = getPlaceReviewById(placeReviewId); + validateRightMemberAccess(loginMember, placeReview); placeReview.update(requestDto, loginMember); return PlaceReviewResponseDto .fromEntity(placeReview, hasLikedPlaceReview(principalDetails, placeReview)); } + private void validateRightMemberAccess(Member member, PlaceReview placeReview) { + if (!Objects.equals(placeReview.getMember().getId(), member.getId())) { + throw new UserInvalidAccessException(); + } + } + @Transactional public DeletePlaceReviewResponseDto deletePlaceReviews( DeletePlaceReviewRequestDto requestDto