๋๊ธ์ ์์ฑํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด์๋ค.
๋จผ์ ๊ฒ์๊ธ ์์ธํ์ด์ง์ ๋๊ธ ์์ฑ ๋ฒํผ์ id๋ฅผ ๋ฃ๊ณ board.js ์์ ์ฒ๋ฆฌํ๋๋ก ํ์๋ค.
< detail.jsp >
.
.
.
<div class="card">
<form>
<input type="hidden" id="boardId" value="${board.id}" />
<div class="card-body">
<textarea id="reply-content" class="form-control" row = "1"></textarea>
</div>
<div class="card-footer">
<button type="button" id="btn-reply-save" class="btn btn-primary">๋ฑ๋ก</button>
</div>
</form>
</div>
<br />
<div class="card">
<div class="card-header">๋๊ธ ๋ฆฌ์คํธ</dv>
<ul id="reply--box" class="list-group">
<c:forEach var="reply" items="${board.replys}">
<li id="reply--1" class="list-group-item d-flex justify-content-between">
<div>${reply.content}</div>
<div class="d-flex">
<div class="font-italic">์์ฑ์ : ${reply.user.username} </div>
<button class="badge">์ญ์ </button>
</div>
</li>
</c:forEach>
</ul>
</div>
.
.
.
< board.js >
replySave: function () {
let data = {
content: $("#reply-content").val()
};
let boardId = $("#boardId").val()
$.ajax({
type: "POST",
url: `/api/board/${boardId}/reply`,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(function (resp) {
// ๊ฒฐ๊ณผ๊ฐ ์ ์์ด๋ฉด done ์คํ
alert("๋๊ธ์์ฑ์ด ์๋ฃ๋์์ต๋๋ค.");
location.href = `/board/${boardId}`;
}).fail(function (error) {
// ์คํจํ๋ฉด fail ์คํ
alert("๋๊ธ์์ฑ์ด ์คํจํ์์ต๋๋ค.");
alert(JSON.stringify(error));
});
},
์ฌ๊ธฐ์ url ์ ๋ฐฑํฑ์ ์ฐ๋ ์ด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ฅผ ๋ฌธ์์ด์ ๋ฐ์ธ๋ฉ ํ๊ธฐ ์ํด์์ด๋ค.
Reply ์ค๋ธ์ ํธ๋ Board์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๊ธฐ ๋๋ฌธ์, ํด๋น ๋๊ธ์ด ์ด๋ ๊ธ์ ์ฐ์ฌ์ง ๊ฒ์ธ์ง ์์์ผ ํ๋ค.
๋ฐ๋ผ์ jsp์์ hidden ๊ฐ์ผ๋ก board.id ๋ฅผ ๋๊ฒจ์ฃผ์๊ณ , ์ด๋ฅผ board.js ์์ ๋ฐ์ url๋ก ๋ณด๋๋ค.
๐ data๋ body์ ๋ด๊ณ , boardId๋ ์ฃผ์์ ๋ด์ ๊ฒ!!
์ด์ ์ปจํธ๋กค๋ฌ์์ ์์ ์ฃผ์๋ฅผ ์ฒ๋ฆฌํ๋ค.
< BoardApiController >
@PostMapping("/api/board/{boardId}/reply")
public ResponseDto<Integer> replySave(@PathVariable int boardId, @RequestBody Reply reply, @AuthenticationPrincipal PrincipalDetail principal) {
boardService.๋๊ธ์ฐ๊ธฐ(principal.getUser(), boardId, reply);
return new ResponseDto<Integer>(HttpStatus.OK.value(), 1);
}
boardId ์ reply ๊ฐ์ฒด, principal๋ก ํ์ฌ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ฅผ ๋ฐ์์จ๋ค. (๋๊ธ์ ์์ฑํ User ๋ฅผ ์๊ธฐ ์ํด)
< BoardService >
@Transactional // ์ ์ฒด๊ฐ ์ฑ๊ณตํด์ผ commit, ์คํจํ๋ฉด rollback
public void ๋๊ธ์ฐ๊ธฐ(User user, int boardId, Reply requestReply) {
Board board = boardRepository.findById(boardId)
.orElseThrow(()->{
return new IllegalArgumentException("๋๊ธ ์ฐ๊ธฐ ์คํจ : ๊ฒ์๊ธ id๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. id : " + boardId);
});
requestReply.setBoard(board);
requestReply.setUser(user);
replyRepository.save(requestReply);
}
reply์๋ content ๋ฐ์ ์์ผ๋ฏ๋ก user์ board๋ฅผ ์ง์ setํ ํ, save ํ๋ค.
์๋ฃ ใ ใ