Skip to content

Commit

Permalink
feat(#42): 리뷰 삭제 기능
Browse files Browse the repository at this point in the history
  • Loading branch information
ghdcksgml1 committed Jan 18, 2023
1 parent 4dc22b0 commit adb5b77
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,19 @@ public ResponseDTO<?> selectByStoreId(@ApiParam(name = "storeId", value = "PathV
@ApiOperation(value = "DTO를 받아 리뷰를 생성해주는 API",
notes = "POST로 리뷰 작성 정보를 보내면 데이터베이스에 저장합니다.")
@PostMapping("/{userOrderDetailId}")
public ResponseDTO<?> insertReview(@ApiParam(name = "userOrderDetailId", value = "유저의 주문 정보를 PathVariable로 넘겨주세요.") @PathVariable Long userOrderDetailId,
public ResponseDTO<?> insertReview(@ApiParam(name = "userOrderDetailId", value = "유저의 주문 정보를 PathVariable로 넘겨주세요.", example = "1") @PathVariable Long userOrderDetailId,
@ApiParam(name = "ReviewRequestDTO", value = "star, content, MultiParFile을 form-data로 넘겨주세요.") @ModelAttribute ReviewRequestDTO requestDTO,
@AuthenticationPrincipal String userId) {
reviewService.insertReview(userOrderDetailId, userId, requestDTO);
return new ResponseDTO<>(HttpStatus.OK.value(), "OK");
}

@ApiOperation(value = "reviewId를 받아 리뷰를 삭제해주는 API",
notes = "visible을 false로 만듭니다. 자신의 리뷰만 삭제할 수 있다.")
@DeleteMapping("/{reviewId}")
public ResponseDTO<?> deleteReview(@ApiParam(name = "reviewId", value = "PathVariable로 넘겨주세요.") @PathVariable Long reviewId,
@AuthenticationPrincipal String userId) {
reviewService.deleteReview(reviewId, userId);
return new ResponseDTO<>(HttpStatus.OK.value(), "OK");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@

public class ReviewNotFoundException extends SwhackathonException {
public ReviewNotFoundException() {
super(HttpStatus.NOT_FOUND, Message.USER_NOT_FOUND);
super(HttpStatus.NOT_FOUND, Message.REVIEW_NOT_FOUND);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
import org.springframework.data.domain.PageRequest;

import java.util.List;
import java.util.Optional;

public interface ReviewRepositoryCustom {
public List<Review> findReviewAll();
public List<Double> reviewAvg();
public List<ReviewResponseDTO> findByStoreId(Long storeId, PageRequest pageRequest);
public Optional<Review> validReviewWriter(Long reviewId, String userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

import static com.proceed.swhackathon.model.QMenu.menu;
import static com.proceed.swhackathon.model.QOrder.order;
import static com.proceed.swhackathon.model.QOrderDetail.orderDetail;
import static com.proceed.swhackathon.model.QReview.*;
import static com.proceed.swhackathon.model.QReview.review;
import static com.proceed.swhackathon.model.QUser.user;
import static com.proceed.swhackathon.model.QUserOrderDetail.userOrderDetail;
import static com.querydsl.core.group.GroupBy.groupBy;
Expand Down Expand Up @@ -65,7 +66,7 @@ public List<ReviewResponseDTO> findByStoreId(Long storeId, PageRequest pageReque
.join(orderDetail.menu, menu)
.join(userOrderDetail.order, order)
.where(order.store.id.eq(storeId)
.and(review.visible.eq(false)))
.and(review.visible.eq(true)))
.offset(pageRequest.getOffset())
.limit(pageRequest.getPageSize())
.orderBy(review.id.desc())
Expand All @@ -91,4 +92,27 @@ public List<ReviewResponseDTO> findByStoreId(Long storeId, PageRequest pageReque
)
);
}

/**
* 1. reviewId를 통해 리뷰 가져오기
* 2. userId를 통한 해당 유저의 리뷰가 맞는지 검증
* 3. visible이 true인지 검증
* 4. 예외 처리를 위해 Optional로 감싸기
*
* @param reviewId
* @param userId
* @return
*/
@Override
public Optional<Review> validReviewWriter(Long reviewId, String userId) {
Review result = queryFactory
.selectFrom(review)
.where(
review.id.eq(reviewId)
.and(review.createdBy.eq(userId))
.and(review.visible.eq(true)))
.fetchOne();

return Optional.ofNullable(result); // Optional 객체로 변환 시켜서 리턴
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/proceed/swhackathon/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,17 @@ public void insertReview(Long userOrderDetailId, String userId, ReviewRequestDTO
uod.setUserOrderDetailStatus("REVIEW_DONE");
}

// reviewId를 통해 review의 visible 컬럼을 false로 만듬으로써 삭제 기능을 대신한다.
@Transactional
public void deleteReview(Long reviewId, String userId) {
// 해당 유저의 리뷰인지 검증한다.
Review review = reviewRepository.validReviewWriter(reviewId, userId).orElseThrow(() -> {
throw new ReviewNotFoundException();
});

review.setVisible(false); // 리뷰 숨김처리
}

// 리뷰 평균 계산 크론탭
// @Scheduled(cron = "0 0 0/1 * * *") // 매 시간마다 실행
// public void reviewGradeUpdate() {
Expand Down

0 comments on commit adb5b77

Please sign in to comment.