web/맛슐랭 Project

맛슐랭 - 맛집 리뷰 Controller 구현

su0a 2024. 3. 27. 15:53

1. URL - 'reviews/create'

리뷰 생성을 위한 url이다.

리뷰를 생성하기 위한 html에 reviewCreateRequest 객체를 model에 담아 보내주었다.

(리뷰 작성 정보를 reviewCreateRequest 객체에 담아오기 위해서이다.)

@GetMapping("/create")
public String reviewPage(Model model) {
    model.addAttribute("reviewCreateRequest",new ReviewCreateRequest());
    return "/reviews/create";
}

리뷰 등록 버튼을 누르면 /reviews/create url로 reviewCreateRequest 객체가 전송된다.

해당 리뷰에 이상이 없는지 검증 후 이상이 있다면 오류를 담아 동일한 html에 띄우고 이상이 없다면 해당 리뷰를 저장 후 리뷰가 등록되었다는 alert창을 띄운다.

@PostMapping("/create")
public String createReview(@Valid  @ModelAttribute ReviewCreateRequest req, Model model,BindingResult bindingResult) throws IOException {
    SessionUser user = (SessionUser) httpSession.getAttribute("user");

    Member member = memberRepository.findByEmail(user.getEmail()).get();
    if(reviewService.validReview(member,req,bindingResult).hasErrors()){
        return "/reviews/create";
    }
    else{
        reviewService.saveReview(req,member);
        model.addAttribute("message","리뷰가 등록되었습니다!");
        model.addAttribute("nextUrl","/members/myPage");
        return "printMessage";
    }
}

 

2. URL - 'reviews/myReview'

로그인 한 멤버가 작성한 리뷰를 반환하는 url이다.

나의 맛집 카테고리를 클릭하면 내가 작성한 리뷰의 맛집들을 볼 수 있다.

한 페이지에 review를 최대 15개로 제한하기 위해 PageRequest객체를 사용했다.

@GetMapping("/myReview")
public String myReview(Model model,@RequestParam(required = false,defaultValue = "1") int page){
    SessionUser user = (SessionUser) httpSession.getAttribute("user");
    List<ReviewDto> reviewDtoList = reviewService.getMyReviews(user.getEmail());
    PageRequest pageRequest = PageRequest.of(page - 1, 15, Sort.by("id").descending());
    Long myReviewCnt = reviewRepository.countReviewByMemberEmail(user.getEmail());
    Page<ReviewDto> reviewDtos = new PageImpl<>(reviewDtoList, pageRequest, myReviewCnt);
    model.addAttribute("reviewDtos",reviewDtos);
    model.addAttribute("reviewDto",new ReviewDto());
    return "reviews/myReview";
}

 

3. URL - 'reviews/modify'

myReview html 내에 수정 버튼 클릭시 수정된 리뷰의 dto가 model에 담겨 전송된다.

해당 dto가 어떤 review의 dto인지 id를 통해 찾고 수정한다.

@PostMapping("/modify")
public String modifyReview(Model model,@ModelAttribute ReviewDto reviewDto)throws IOException{
    reviewService.modifyReview(reviewDto);
    model.addAttribute("message","리뷰가 수정되었습니다!");
    model.addAttribute("nextUrl","/members/myPage");
    return "printMessage";
}

 

4. URL - '/images/{filename}'

html 내에서 특정 이미지를 띄우기 위해 사용한다

@ResponseBody
@GetMapping("/images/{filename}")
public Resource showImage(@PathVariable String filename) throws MalformedURLException {
    return new UrlResource("file:"+uploadImageService.getFullPath(filename));
}