현재 까지 질문 및 답변 등록에 대해서만 진행했었고, 여기서 추가적으로 질문 및 답변 수정 및 삭제 부분을 추가로 진행
이전에 만든 QuestionForm을 이용해서 수정 폼으로도 재활용하는 방식 사용.
@PreAuthorize("isAuthenticated()")
@GetMapping("/modify/{id}")
public String questionModify(QuestionForm questionForm,@PathVariable("id") Integer id,Principal principal){
Question question = questionService.getQuestion(id);
if(!question.getAuthor().getUsername().equals(principal.getName())){
throw new ResponseStatusException(HttpStatus.BAD_REQUEST,"수정권한이 없습니다.");
}
questionForm.setSubject(question.getSubject());
questionForm.setContent(question.getContent());
return "question_form";
}
question_form 수정(추가되는 것만)
<form th:object="${questionForm}" method="post">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
@Transactional
public void modify(Question question,String subject,String content){
question.update(subject,content);
}
const delete_elements = document.getElementsByClassName("delete");
Array.from(delete_elements).forEach(function(element) {
element.addEventListener('click', function() {
if(confirm("정말로 삭제하시겠습니까?")) {
location.href = this.dataset.uri;
};
});
});
@PreAuthorize("isAuthenticated()")
@GetMapping("/delete/{id}")
public String questionDelete(Principal principal, @PathVariable("id") Integer id) {
Question question = questionService.getQuestion(id);
if (!question.getAuthor().getUsername().equals(principal.getName())) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다.");
}
questionService.delete(question);
return "redirect:/";
}
@Transactional
public void delete(Question question) {
questionRepository.delete(question);
}
답변 수정과 삭제의 경우에도 질문을 수정하거나 삭제하는 매커니즘은 같다.