점프 투 스프링부트를 참고하여 학습,작성하였습니다.
1.속성추가
질문,답변 각각 모델에 추천 속성을 추가한다.
Set 자료형을 사용하여 한명이 하나의 질문,답변에 여러번 추천을 불가능하게한다.
@ManyToMany
Set<SiteUser> voter;
2.추천 버튼
질문,답변의 추천 버튼과 다시한번 물어보는 자바스크립트를 작성
<a href="javascript:void(0);" class="recommend btn btn-sm btn-outline-secondary"
th:data-uri="@{|/question/vote/${question.id}|}">
추천
<span class="badge rounded-pill bg-success" th:text="${#lists.size(question.voter)}"></span>
</a>
<a href="javascript:void(0);" class="recommend btn btn-sm btn-outline-secondary"
th:data-uri="@{|/answer/vote/${answer.id}|}">
추천
<span class="badge rounded-pill bg-success" th:text="${#lists.size(answer.voter)}"></span>
</a>
const recommend_elements = document.getElementsByClassName("recommend");
Array.from(recommend_elements).forEach(function(element) {
element.addEventListener('click', function() {
if(confirm("정말로 추천하시겠습니까?")) {
location.href = this.dataset.uri;
};
});
});
3.서비스 추가
질문,답변 각각 서비스에 vote 메소드를 추가한다.
로그인한 사용자를 추천인으로 저장한다.
public void vote(Question question, SiteUser siteUser) {
question.getVoter().add(siteUser);
this.questionRepository.save(question);
}
public void vote(Answer answer, SiteUser siteUser) {
answer.getVoter().add(siteUser);
this.answerRepository.save(answer);
}
4.컨트롤러 추가
추천 컨트롤러 제작
@PreAuthorize("isAuthenticated()")
@GetMapping("/vote/{id}")
public String questionVote(Principal principal, @PathVariable("id") Integer id) {
Question question = this.questionService.getQuestion(id);
SiteUser siteUser = this.userService.getUser(principal.getName());
this.questionService.vote(question, siteUser);
return String.format("redirect:/question/detail/%s", id);
}
@PreAuthorize("isAuthenticated()")
@GetMapping("/vote/{id}")
public String answerVote(Principal principal, @PathVariable("id") Integer id) {
Answer answer = this.answerService.getAnswer(id);
SiteUser siteUser = this.userService.getUser(principal.getName());
this.answerService.vote(answer, siteUser);
return String.format("redirect:/question/detail/%s", answer.getQuestion().getId());
}
'BackEnd > SpringBoot' 카테고리의 다른 글
[Spring Boot] 검색기능 (0) | 2024.07.08 |
---|---|
[Spring Boot] 수정, 삭제 (0) | 2024.07.08 |
[Spring Boot] 글쓴이 항목 추가 (0) | 2024.07.05 |