엔티티
public void setRating(float rating) {
this.rating = rating;
}
(컨트롤러)
@Controller
@RequiredArgsConstructor
@RequestMapping("/review")
public class ReviewController {
private final ReviewService reviewService;
private final MemberService memberService;
private final BookService bookService;
@PreAuthorize("isAuthenticated()")
@PostMapping("/create/{id}")
public String reviewCreate(@PathVariable("id") Integer id, @Valid ReviewForm reviewForm,
BindingResult bindingResult, Principal principal, org.springframework.ui.Model model){
Book books = this.bookService.getBookById(id);
if (books == null) {
// 책이 존재하지 않는 경우에 대한 처리
return "redirect:/books/list"; // 예시로 책 목록 페이지로 리다이렉트
}
float rating = reviewForm.getRating();
if (bindingResult.hasErrors()) {
model.addAttribute("books",books);
return "book_detail";
}
Member member = this.memberService.findByUsername(principal.getName());
if (member == null) {
// 작성자를 찾을 수 없는 경우에 대한 처리
return "redirect:/book/list"; // 예시로 홈 페이지로 리다이렉트
}
this.reviewService.create(books,reviewForm.getContent(), member,rating);
return String.format("redirect:/book/detail/%d", id);
}
@PreAuthorize("isAuthenticated()")
@PostMapping("/modify/{id}")
public String reviewModify(@PathVariable("id") Integer id,@Valid ReviewForm reviewForm,
BindingResult bindingResult, Principal principal){
Review review = this.reviewService.getReview(id);
if (review == null) {
// 책이 존재하지 않는 경우에 대한 처리
return "redirect:/book/list"; // 예시로 책 목록 페이지로 리다이렉트
}
float rating = reviewForm.getRating();
if (bindingResult.hasErrors()) {
return "book_detail";
}
Member author = review.getAuthor();
// 현재 로그인한 사용자가 해당 리뷰의 작성자인지 확인
if (!principal.getName().equals(author.getUsername())) {
// 작성자와 다른 사용자가 수정을 시도한 경우에 대한 처리
return "redirect:/books/list"; // 예시로 책 목록 페이지로 리다이렉트
}
review.setContent(reviewForm.getContent());
this.reviewService.modify(review, reviewForm.getContent(),rating);
return String.format("redirect:/book/detail/%s",review.getBook().getId());
}```
(서비스)
public void create(Book books, String content, Member author,float rating) {
Review review = Review.builder()
.book(books)
.content(content)
.rating(rating)
.createDate(LocalDateTime.now())
.modifiedDate(LocalDateTime.now())
.author(author)
.build();
reviewRepository.save(review);
}
public void modify(Review review, String content,float rating){
// 기존의 리뷰 객체의 내용을 업데이트
review.setContent(content);
review.setRating(rating);
review.setModifiedDate(LocalDateTime.now()); // 수정일 업데이트
reviewRepository.save(review); // 업데이트된 리뷰 저장
}