[ 작업한 내용 ]
< 사용자: 책 리뷰 전체 목록(본인) >
# UserReviewController
- Service 계층으로 파라미터 전달 후 결과를 받아서 저장할 타입을 Page에서 PageResponse로 변경
@GetMapping("/me/reviews")
public ResponseEntity<?> allListReview(
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size,
@AuthenticationPrincipal User user) {
// 서비스로직
PageResponse<UserReviewListResDTO> responseDTO = userReviewService.allListReview(page, size, user.getId());
// 성공메시지
String message = messageProvider.getMessage(ReviewSuccessCode.REVIEW_LIST_FETCHED.getMessage());
// 응답
return ResponseEntity
.status(ReviewSuccessCode.REVIEW_LIST_FETCHED.getHttpStatus())
.body(ApiResponse.success(
ReviewSuccessCode.REVIEW_LIST_FETCHED,
message,
responseDTO));
}
# UserReviewService
- 메서드 타입을 Page에서 PageResponse로 변경.
- 불필요한 @Transactional 어노테이션 제거.
- Page<Review>로 Repository에서 조회한 결과를 저장한 것을 List<UserReviewListResDTO>타입으로 변경하였는데 Page<UserReviewListResDTO>로 맵핑 후 저장하는 것으로 변경.
- Controller로 반환 시 new PageImpl<>()에서 PageResponse<>(); 형태로 생성하여 반환하는 것으로 변경.
- 주석 내용 수정.
public PageResponse<UserReviewListResDTO> allListReview(int page, int size, Long userId) {
// 사용자 조회, 유효성 검사
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(UserErrorCode.USER_NOT_FOUND));
// 페이징 정의
Pageable pageable = PageRequest.of(page, size);
// userId로 책 리뷰 조회
Page<Review> result = reviewRepository.findByUser_Id(user.getId(), pageable);
// Page<Review> -> Page<UserReviewListResDTO> 맵핑 후 생성
Page<UserReviewListResDTO> pageDTO = result.map(UserReviewListResDTO::new);
// 반환
return new PageResponse<>(pageDTO);
}
< 사용자: 책 리뷰 상세 조회 >
# UserReviewController
- 주석 변경
# UserReviewService
- 주석 변경
< 사용자: 책 리뷰 수정 >
# UserReviewUpdateResDTO
- 리뷰 고유번호, 사용자 아이디 필드 추가 (id, username)
@Getter
public class UserReviewUpdateResDTO {
private Long id;
private String username;
private String bookTitle;
private String content;
private LocalDateTime updatedDate;
public UserReviewUpdateResDTO(Review review) {
this.id = review.getId();
this.username = review.getUser().getUsername();
this.bookTitle = review.getBook().getTitle();
this.content = review.getContent();
this.updatedDate = review.getUpdatedDate();
}
}
# UserReviewController
- 주석 변경
# UserReviewService
- 주석 변경
< 사용자: 책 리뷰 삭제 >
# UserReviewDeleteResDTO
- 리뷰 고유번호, 사용자 아이디 필드 추가 (id, username)
@Getter
public class UserReviewDeleteResDTO {
private Long id;
private String bookTitle;
private String username;
private LocalDateTime deletedAt;
public UserReviewDeleteResDTO(Review review) {
this.id = review.getId();
this.bookTitle = review.getBook().getTitle();
this.username = review.getUser().getUsername();
this.deletedAt = LocalDateTime.now();
}
}
# UserReviewController
- 주석 변경
# UserReviewService
- 주석 변경
< 사용자: 책 리뷰 검색 >
# UserReviewSearchResDTO
- 리뷰 고유번호, 사용자 아이디 필드 추가 (id, username)
@Getter
public class UserReviewSearchResDTO {
private Long id;
private String username;
private String bookTitle;
private String content;
private LocalDateTime createdDate;
public UserReviewSearchResDTO(Review review) {
this.id = review.getId();
this.username = review.getUser().getUsername();
this.bookTitle = review.getBook().getTitle();
this.content = review.getContent();
this.createdDate = review.getCreatedDate();
}
}
# UserReviewController
- 주석 변경.
- Page<UserReviewSearchResDTO>로 결과를 전달 받는 것을 PageResponse<UserReviewSearchResDTO> 형태로 수정.
@GetMapping("/me/reviews/search")
public ResponseEntity<?> searchReview(
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size,
@AuthenticationPrincipal User user) {
// 서비스로직
PageResponse<UserReviewSearchResDTO> responseDTO = userReviewService.searchReview(keyword, page, size, user.getId());
// 성공메시지
String message = messageProvider.getMessage(ReviewSuccessCode.REVIEW_FETCHED.getMessage());
// 응답
return ResponseEntity
.status(ReviewSuccessCode.REVIEW_FETCHED.getHttpStatus())
.body(ApiResponse.success(
ReviewSuccessCode.REVIEW_FETCHED,
message,
responseDTO));
}
# UserReviewService
- 주석 변경.
- Page<UserReviewSearchResDTO>타입의 메서드를 PageResponse<UserReviewSearchResDTO> 로 변경
- Page<Review> -> Page<UserReviewSearchResDTO> 맵핑,
- Controller로 반환 시 PageResponse<>()로 반환.
public PageResponse<UserReviewSearchResDTO> searchReview(String keyword, int page, int size, Long userId) {
// 사용자 조회 + 예외 처리
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(UserErrorCode.USER_NOT_FOUND));
// 페이징 정의
Pageable pageable = PageRequest.of(page, size);
// 검색어 조회 + 페이지 처리
Page<Review> result = keyword != null ? result = reviewRepository.findByUser_IdAndBook_TitleContainingIgnoreCase(user.getId(), keyword, pageable) : reviewRepository.findAll(pageable);
// Page<Review> -> Page<UserReviewSearchResDTO> 맵핑
Page<UserReviewSearchResDTO> pageDTO = result.map(UserReviewSearchResDTO::new);
// 반환
return new PageResponse<>(pageDTO);
}