34. 댓글 구현 : 댓글 쓰기

Feb 15, 2024
34. 댓글 구현 : 댓글 쓰기

1. 댓글 확인하기

  • 로그인 한 사람만 댓글을 쓸 수 있음
  • 게시판 글쓰기처럼 댓글 작성하기
  • 게시판 목록처럼 댓글 리스트가 구현하기
  • 게시판 삭제하기처럼 기본으로 비 활성화하기
user의 객체와 sessionUser가 같을 경우 삭제 버튼 활성화하기
notion image
notion image
  • userId는 session에 있음
  • boardId는 받아야 하는데 눈에 보일 필요가 없음
  • board.id는 확인이 필요함!
notion image
  • board.id는 확인 완료
notion image
notion image
 

2. ReplyRequest에서 SaveDTO 만들기

  • 댓글 내용(content) 담을 가방 만들기
  • userId는 session에서 가져올 것임
package shop.mtcoding.blog.reply; import lombok.Data; public class ReplyRequest { @Data public static class SaveDTO { private String comment; private int id; private int boardId; // userId는 session에서 가져올 것임 } }
 

3. ReplyRepository 만들기

  • replySave() 구현하기
replt_tb에 insert하는 쿼리문 작성하기
package shop.mtcoding.blog.reply; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @RequiredArgsConstructor @Repository public class ReplyRepository { private final EntityManager em; @Transactional public void save(ReplyRequest.SaveDTO requestDTO, int userId) { Query query = em.createNativeQuery("insert into board_tb(comment, board_id, user_id, created_at) values(?,?,? now())"); query.setParameter(1, requestDTO.getComment()); query.setParameter(2, requestDTO.getBoardId()); query.setParameter(3, userId); query.executeUpdate(); } }
 

4. ReplyController 만들기

  • 인증 체크하기
로그인 한 사람만 댓글을 달 수 있음
로그인 안 했으면 로그인 페이지로 리다이렉션
package shop.mtcoding.blog.reply; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import shop.mtcoding.blog.user.User; // 댓글 쓰기, 댓글 삭제, 댓글 목록보기 @RequiredArgsConstructor @Controller public class ReplyController { private final HttpSession session; private final ReplyRepository replyRepository; @PostMapping("/reply/save") public String save(ReplyRequest.SaveDTO requestDTO) { System.out.println(requestDTO); // 1. 인증 체크 User sessionUser = (User) session.getAttribute("sessionUser"); System.out.println("sessionUser:" + sessionUser); if (sessionUser == null) { return "redirect:/loginForm"; } // 2. 유효성 검사(님들이 하세요) // 핵심코드 replyRepository.save(requestDTO, sessionUser.getId()); return "redirect:/board/" + requestDTO.getBoardId(); }
notion image
notion image
  • 아직 페이지 구현 안해서 오류나는게 맞음!
notion image
 
Share article

vosw1