Review 생성하기
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/review")
public class ReviewController {
private final MultiService multiService;
public ResponseEntity<?> createReview(@RequestHeader("Authorization") String accessToken, @RequestBody ReviewRequestDTO reviewRequestDTO) {
TokenRecord tokenRecord = this.multiService.checkToken(accessToken);
if (tokenRecord.isOK()) {
String username = tokenRecord.username();
List<ReviewResponseDTO> reviewResponseDTOList = multiService.reviewCreate(username, reviewRequestDTO);
return tokenRecord.getResponseEntity(reviewResponseDTOList);
}
return tokenRecord.getResponseEntity();
}
@Transactional
public List<ReviewResponseDTO> reviewCreate(String username, ReviewRequestDTO reviewRequestDTO) {
SiteUser siteUser = userService.get(username);
Product product = productService.getProduct(reviewRequestDTO.getProductId());
reviewService.create(siteUser, reviewRequestDTO, product);
List<ReviewResponseDTO> reviewResponseDTOList = new ArrayList<>();
List<Review> reviewList = this.reviewService.getList(product);
for (Review review : reviewList) {
reviewResponseDTOList.add(ReviewResponseDTO.builder()
.modifyDate(this.dateTimeTransfer(review.getModifyDate()))
.review(review)
.createDate(this.dateTimeTransfer(review.getCreateDate()))
.build());
}
return reviewResponseDTOList;
}
@Transactional
public SiteUser get(String username) throws IllegalArgumentException {
return this.userRepository.findById(username).orElse(null);
}
@Transactional
public Product getProduct (Long productId) {
return this.productRepository.findById(productId)
.orElseThrow(() -> new IllegalArgumentException("not found product"));
}
@Service
@RequiredArgsConstructor
public class ReviewService {
private final ReviewRepository reviewRepository;
public Review create(SiteUser siteUser , ReviewRequestDTO reviewRequestDTO, Product product) {
return reviewRepository.save(Review.builder()
.title(reviewRequestDTO.getTitle())
.grade(reviewRequestDTO.getGrade())
.content(reviewRequestDTO.getContent())
.product(product)
.siteUser(siteUser)
.build());
}