Skip to content

Commit

Permalink
Merge pull request #95 from kea-dpang/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
oo-ni authored Feb 14, 2024
2 parents 6ca7e3d + b625e10 commit ac7b8ee
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 16 deletions.
11 changes: 9 additions & 2 deletions src/main/java/kea/dpang/item/controller/ReviewController.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@RestController
Expand All @@ -42,11 +45,15 @@ public ResponseEntity<BaseResponse> createReview(@RequestBody CreateReviewReques

@GetMapping("/{reviewerId}/list")
@Operation(summary = "사용자별 리뷰 리스트 조회", description = "사용자 정보에 따라 리뷰 리스트를 조회합니다.")
public ResponseEntity<SuccessResponse<List<PersonalReviewDto>>> getReviewPersonalList(
public ResponseEntity<SuccessResponse<Page<PersonalReviewDto>>> getReviewPersonalList(
@PathVariable @Parameter(description = "리뷰 작성자 ID", example = "1") Long reviewerId,
@Parameter(description = "리뷰 작성 시작 날짜") @RequestParam(required = false)
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate,
@Parameter(description = "리뷰 작성 종료 날짜") @RequestParam(required = false)
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate,
Pageable pageable
) {
List<PersonalReviewDto> reviews = reviewService.getPersonalReviewList(reviewerId, pageable);
Page<PersonalReviewDto> reviews = reviewService.getPersonalReviewList(reviewerId, startDate, endDate, pageable);

return new ResponseEntity<>(
new SuccessResponse<>(HttpStatus.OK.value(), "리뷰 리스트가 조회되었습니다.", reviews),
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/kea/dpang/item/dto/review/PersonalReviewDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.AllArgsConstructor;
import lombok.Data;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
Expand All @@ -19,8 +20,11 @@ public class PersonalReviewDto {
private String content;
private Double rating;
private LocalDateTime createdTime;
private LocalDate startDate;
private LocalDate endDate;

public static PersonalReviewDto of(Review review, String reviewerName) {

public static PersonalReviewDto of(Review review, String reviewerName, LocalDate startDate, LocalDate endDate) {
return new PersonalReviewDto(
review.getReviewId(),
review.getReviewerId(),
Expand All @@ -30,7 +34,9 @@ public static PersonalReviewDto of(Review review, String reviewerName) {
review.getItem().getThumbnailImage(),
review.getContent(),
review.getRating(),
review.getCreatedTime()
review.getCreatedTime(),
startDate,
endDate
);
}
}
4 changes: 4 additions & 0 deletions src/main/java/kea/dpang/item/repository/ReviewRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.time.LocalDate;

public interface ReviewRepository extends JpaRepository<Review, Long> {
Page<Review> findByReviewerId(Long reviewerId, Pageable pageable);

Page<Review> findByItemId(Long itemId, Pageable pageable);

Page<Review> findReviewsTime(Long reviewerId, LocalDate startDate, LocalDate endDate, Pageable pageable);
}
4 changes: 3 additions & 1 deletion src/main/java/kea/dpang/item/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import kea.dpang.item.dto.review.CreateReviewRequestDto;
import kea.dpang.item.dto.review.PersonalReviewDto;
import kea.dpang.item.dto.review.ReviewDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.time.LocalDate;
import java.util.List;

public interface ReviewService {
Expand All @@ -31,6 +33,6 @@ public interface ReviewService {
* @param pageable 페이지 정보
* @param reviewerId 조회할 리뷰 작성자(사용자)의 ID
*/
List<PersonalReviewDto> getPersonalReviewList(Long reviewerId, Pageable pageable);
Page<PersonalReviewDto> getPersonalReviewList(Long reviewerId, LocalDate startDate, LocalDate endDate, Pageable pageable);

}
26 changes: 15 additions & 11 deletions src/main/java/kea/dpang/item/service/ReviewServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -82,24 +83,27 @@ public List<ReviewDto> getReviewList(Long itemId, Pageable pageable) {

// 사용자별 리뷰 리스트 조회
@Override
@Transactional
public List<PersonalReviewDto> getPersonalReviewList(Long reviewerId, Pageable pageable) {
// 사용자 서버로부터 사용자 정보 조회
ResponseEntity<SuccessResponse<UserDetailDto>> responseEntity = userServiceFeignClient.getReviewer(reviewerId);
@Transactional(readOnly = true)
public Page<PersonalReviewDto> getPersonalReviewList(Long reviewerId, LocalDate startDate, LocalDate endDate, Pageable pageable) {
log.info("리뷰 목록 조회 시작. 시작 날짜: {}, 종료 날짜: {}, 리뷰어 ID: {}, 페이지 정보: {}", startDate, endDate, reviewerId, pageable);

Page<Review> reviews = reviewRepository.findReviewsTime(reviewerId, startDate, endDate, pageable);

log.info("리뷰 목록 조회 완료. 조회된 리뷰 건수: {}", reviews.getTotalElements());

// 리뷰 목록이 비어있으면 빈 페이지를 반환한다.
if (reviews.isEmpty()) {
return Page.empty(pageable);
}

// 사용자 이름 가져오기
ResponseEntity<SuccessResponse<UserDetailDto>> responseEntity = userServiceFeignClient.getReviewer(reviewerId);
String name = Optional.ofNullable(responseEntity.getBody())
.map(SuccessResponse::getData)
.map(UserDetailDto::getName)
.orElseThrow(() -> new RuntimeException("사용자 정보 조회에 실패하였습니다."));

// 사용자 리뷰 리스트 조회
Page<Review> reviews = reviewRepository.findByReviewerId(reviewerId, pageable);

// 리뷰 리스트를 PersonalReviewDto로 변환
return reviews.getContent().stream()
.map(review -> PersonalReviewDto.of(review, name))
.toList();
return reviews.map(review -> PersonalReviewDto.of(review, name, startDate, endDate));
}

}

0 comments on commit ac7b8ee

Please sign in to comment.