댓글쓰기 view


댓글 작성은 댓글 내용만 받으면 된다. 하지만 작성시 게시글의 번호도 함께 받아야 하기 때문에 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 한다.
댓글쓰기 인터셉터 설정 (대신 권한체크 해주기)

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


Share article