@GetMapping("/detail/{id}")
기존에 위의 api로 상세 페이지에 접속하게 했는데
상세페이지에서 댓글이 작성하게 만들어보자
댓글은 로그인한 회원만 달 수 있고, 작성자 id, 작성자 닉네임, 댓글 내용, 본문 글작성자 id 속성을 가지게 만들었다
@Entity
@Getter
@Setter
@ToString
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
@Column
private String content;
@Column
private Long parentId;
}
@GetMapping("/detail/{id}") 이 주소로 들어오면 상세페이지 아래에
댓글 내용을 입력받는 폼이 생성되게 했고 댓글 작성자 id는 안보이게 해서 서버로 전달했다
<form action="/comment" method="post">
<input name="content">
<input name="parentId" th:value = "${item.id}" style="display : none">
<button type="submit">전송</button>
</form>
댓글 엔티티, 리포지토리, 서비스, 컨틀롤러를 만들어주고 /comment로 postmapping이 들어오면 스프링 시큐리티로 한
로그인 인증을 이용해서 로그인 했는지 여부를 @PreAuthorize로 검사하고 폼에 작성한 content와 parentID, principal에서
가져온 사용자 닉네임을 이용해서 db에 댓글을 추가했다
@Controller
@RequiredArgsConstructor
public class CommentController {
private final CommentService commentService;
//로그인 된 유저 정보는 Authentication에서 가져온다
@PreAuthorize("isAuthenticated()") //로그인 여부 확인
@PostMapping("/comment")
String postComment(@RequestParam String content,
@RequestParam Long parentId,
Authentication auth){
CustomUser user = (CustomUser) auth.getPrincipal(); //로그인 된 사용자 정보 가져오기!
Comment data = new Comment();
commentService.saveComments(user.getUsername(),content,parentId);
return "redirect:detail/"+parentId;
}
}
작성한 댓글은 상세페이지에서 해당 페이지 id로 검색해서 나오는 댓글들을 보여주는 방식으로 만들었다
댓글도 페이징을 적용해야 될 것 같으니 해보자
//URL 파라미터로 상품번호로 상세페이지 조회하기
@GetMapping("/detail/{id}")
String detail(@PathVariable Long id, Model model) throws Exception{
Optional<Item> result = itemService.findOne(id);
List<Comment> comments = commentRepository.findAllByParentId(id);
model.addAttribute("comments",comments);
Item item;
if (result.isPresent()){
item = result.get();
model.addAttribute("item", item);
return "detail.html";
}
else return "redirect:/list";
}
'스프링 쇼핑몰 만들어보기' 카테고리의 다른 글
주문, 주문 목록 만들기 (@ManyToOne, @OneToMany, N+1 문제) (0) | 2024.05.13 |
---|---|
검색 기능 - index (0) | 2024.05.08 |
S3 버킷 스프링 어플리케이션에서 사용하기 (0) | 2024.05.05 |
aws S3 이미지 업로드 (0) | 2024.05.05 |
페이지 나누기 (pagination) (0) | 2024.05.05 |