62. 댓글 쓰기

박선규's avatar
Mar 25, 2024
62. 댓글 쓰기

댓글쓰기 view

notion image
notion image
📌
댓글 작성은 댓글 내용만 받으면 된다. 하지만 작성시 게시글의 번호도 함께 받아야 하기 때문에 input 태그에서 hidden 으로 id 값을 같이 받는다.

댓글 쓰기 DTO 만들기

package shop.mtcoding.blog.reply; import lombok.Data; import shop.mtcoding.blog.board.Board; import shop.mtcoding.blog.user.User; public class ReplyRequest { @Data public static class SaveDTO { private Integer boardId; private String comment; public Reply toEntity(User sessionUser, Board board){ return Reply.builder() .comment(comment) .board(board) .user(sessionUser) .build(); } } }
 
📌
영속성 컨텍스트로 INSERT 를 할 때는 엔티티 타입만 가능하기 때문에 DTO를 통해 받은 데이터도 엔티티로 만들어 INSERT 한다.
 
 

댓글쓰기 인터셉터 설정 (대신 권한체크 해주기)

notion image
 

ReplyJPARepository

public interface ReplyJPARepository extends JpaRepository<Reply,Integer> {}
 

ReplyService (정방향 insert)

package shop.mtcoding.blog.reply; import jakarta.persistence.Transient; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import shop.mtcoding.blog._core.erros.exception.Exception404; import shop.mtcoding.blog.board.Board; import shop.mtcoding.blog.board.BoardJPARepository; import shop.mtcoding.blog.user.User; @RequiredArgsConstructor @Service public class ReplyService { private final BoardJPARepository boardJPARepository; private final ReplyJPARepository replyJPARepository; @Transactional public void 댓글쓰기(ReplyRequest.SaveDTO reqDTO, User sessionUser) { Board board = boardJPARepository.findById(reqDTO.getBoardId()) .orElseThrow(() -> new Exception404("없는 게시글에 댓글을 작성할 수 없어요")); Reply reply = reqDTO.toEntity(sessionUser, board); replyJPARepository.save(reply); } }

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 ReplyService replyService; private final HttpSession session; @PostMapping("/reply/save") public String save(ReplyRequest.SaveDTO reqDTO){ User sessionUser = (User) session.getAttribute("sessionUser"); replyService.댓글쓰기(reqDTO, sessionUser); return "redirect:/board/"+reqDTO.getBoardId(); } }
 
 
notion image
 
notion image
Share article

p4rksk