Skip to content

Commit

Permalink
Feature/#84 review (#85)
Browse files Browse the repository at this point in the history
  • Loading branch information
hOch1 authored Oct 14, 2024
1 parent aea96b9 commit 3533aab
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,23 @@ public ResponseEntity<ApiResponse<String>> addReview(@AuthenticationPrincipal Me
return ResponseEntity.ok(new ApiResponse<>("success"));
}

@PatchMapping("/{reviewId}")
@Operation(summary = "리뷰 수정")
public ResponseEntity<ApiResponse<String>> updateReview(@AuthenticationPrincipal Member member,
@PathVariable Long reviewId,
@RequestBody ReviewDto reviewDto) {

reviewService.updateReview(member, reviewId, reviewDto);
return ResponseEntity.ok(new ApiResponse<>("success"));
}

@DeleteMapping("/{reviewId}")
@Operation(summary = "리뷰 삭제")
public ResponseEntity<ApiResponse<String>> deleteReview(@AuthenticationPrincipal Member member,
@PathVariable Long reviewId) {

reviewService.deleteReview(member, reviewId);
return ResponseEntity.ok(new ApiResponse<>("success"));
}

}
1 change: 1 addition & 0 deletions src/main/java/com/dongyang/dongpo/domain/store/Store.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ public StoreDto toResponse() {
.collect(Collectors.toList());

List<ReviewDto> reviewDtos = this.reviews.stream()
.filter(review -> review.getStatus().equals(StoreReview.ReviewStatus.VISIBLE))
.map(StoreReview::toResponse)
.toList();

Expand Down
14 changes: 14 additions & 0 deletions src/main/java/com/dongyang/dongpo/domain/store/StoreReview.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,20 @@ public class StoreReview {
@Builder.Default
private List<StoreReviewPic> reviewPics = new ArrayList<>();

public void delete() {
this.status = ReviewStatus.DELETED;
}

public void update(ReviewDto reviewDto, List<StoreReviewPic> reviewPics) {
this.text = reviewDto.getText() == null ? this.text : reviewDto.getText();
this.status = reviewDto.getStatus() == null ? this.status : reviewDto.getStatus();
this.reviewPics = reviewPics == null ? this.reviewPics : reviewPics;
}

public void clearReviewPics() {
this.reviewPics.clear();
}

public enum ReviewStatus {
VISIBLE, HIDDEN, DELETED
}
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/dongyang/dongpo/dto/store/ReviewDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ public class ReviewDto {
private StoreReview.ReviewStatus status;
private Integer reportCount;


public StoreReview toEntity(Store store, Member member) {
StoreReview storeReview = StoreReview.builder()
.member(member)
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/com/dongyang/dongpo/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ public enum ErrorCode {
STORE_REGISTRATION_NOT_VALID(400, "위치 정보가 오차를 벗어났습니다."),
ARGUMENT_NOT_SATISFIED(400, "요청이 잘못되었습니다."),
BOOKMARK_ALREADY_EXISTS(400, "해당 점포의 북마크가 이미 존재합니다."),
REPORT_REASON_TEXT_REQUIRED(400, "기타 사유는 사유를 작성해야 합니다."),;
REPORT_REASON_TEXT_REQUIRED(400, "기타 사유는 사유를 작성해야 합니다."),

UNAUTHORIZED(403, "권한이 없습니다."),
;

private final int code;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public void addReview(Member member, Long storeId, ReviewDto reviewDto){

public List<ReviewDto> getMyReviews(Member member) {
return reviewRepository.findByMemberWithReviewPicsAndStore(member).stream()
.filter(r -> r.getStatus().equals(StoreReview.ReviewStatus.VISIBLE))
.map(StoreReview::toMyPageResponse)
.toList();
}
Expand All @@ -70,4 +71,42 @@ public List<String> getReviewPicsByStoreId(Long id) {
.filter(Objects::nonNull)
.collect(Collectors.toList());
}

@Transactional
public void updateReview(Member member, Long reviewId, ReviewDto reviewDto) {
StoreReview review = reviewRepository.findById(reviewId)
.orElseThrow(() -> new CustomException(ErrorCode.REVIEW_NOT_FOUND));

if (!review.getMember().equals(member))
throw new CustomException(ErrorCode.UNAUTHORIZED);

List<StoreReviewPic> reviewPics = review.getReviewPics();

if (reviewPics != null && !reviewDto.getReviewPics().isEmpty()) {
review.clearReviewPics();

reviewDto.getReviewPics().forEach(picUrl -> {
StoreReviewPic pic = StoreReviewPic.builder()
.picUrl(picUrl)
.build();
review.addReviewPic(pic);
});
}

review.update(reviewDto, reviewPics);

log.info("Updated Review: {} by Member: {}", reviewId, member.getEmail());
}

@Transactional
public void deleteReview(Member member, Long reviewId) {
StoreReview review = reviewRepository.findById(reviewId)
.orElseThrow(() -> new CustomException(ErrorCode.REVIEW_NOT_FOUND));

if (!review.getMember().equals(member))
throw new CustomException(ErrorCode.UNAUTHORIZED);

review.delete();
log.info("Deleted Review: {} by Member: {}", reviewId, member.getEmail());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ void getMyReviews() {
when(storeReviewRepository.findByMemberWithReviewPicsAndStore(member)).thenReturn(List.of(review1, review2));
when(review1.toMyPageResponse()).thenReturn(reviewDto1);
when(review2.toMyPageResponse()).thenReturn(reviewDto2);
when(review1.getStatus()).thenReturn(StoreReview.ReviewStatus.VISIBLE);
when(review2.getStatus()).thenReturn(StoreReview.ReviewStatus.VISIBLE);

// when
List<ReviewDto> reviewDtos = storeReviewService.getMyReviews(member);
Expand Down

0 comments on commit 3533aab

Please sign in to comment.