inblog logo
|
p4rksk
    JavaSpringFrameWork

    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

    RSS·Powered by Inblog