별점 기능 구현하기

류한선·2024년 3월 14일

2차 프로젝트

목록 보기
15/32
엔티티
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); // 업데이트된 리뷰 저장
    }

0개의 댓글