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));
}