단 하나의 맥락
: @ManyToMany 로 추천 기능 작성
Semiflow Bundle
: Question에 Voter 속성 추가
: Answer에 Voter 속성 추가
: 질문 추천 버튼 question_detail에 추가
: 추천 확인 창 Javascript 코드 question_detail에 추가
: QuestionService에 추천인 저장 vote 메서드 추가
: QuestionController에 questionVote 메서드 @GetMapping
: 답변 추천 버튼 question_detail에 추가
: AnswerService에 추천인 저장 vote 메서드 추가
: AnswerController에 answerVote 메서드 추가
질문 추천 기능
> Question Entity와 Answer Entity에
// import java.util.set;
// import javax.persistence.ManyToMany;
- @ManyToMany
- @Set<SiteUser> voter;
추가한다
-
질문 추천 버튼을 작성하기 위해
> question_detail에
수정 버튼 위 버튼 작성
- <a href="javascript:void(0);"
- class="recommend btn btn-sm btn-outline-secondary"
- th:data-url="@{|question/vote/${question.id}|}"></a> 내부에
- 추천 <span class="badge rounded-pill bg-success" th:text="${$lists.size(question.voter)}"></span> 삽입
> 역시 question_detail 삭제 javascript 코드 하단
- const recommend_elements = document.getElementsByClassName("recommend");
- Array.from(recommend_elements).forEach(function(element)) {
- element.addEventListener('click', function() {
- if (confirm ("정말로 추천하시겠습니까?")) {
- location.href = this.dataset.uri;
- };
- if (confirm ("정말로 추천하시겠습니까?")) {
- });
- element.addEventListener('click', function() {
- });
삽입
-
> QuestionService에서
- M : public void vote
- S : (Question question, SiteUser siteUser)
- A1 : question.getVoter().add(siteUser);
- A2 : this.questionRepository.save(question);
-
> QuestionController에서
- @PreAuthorize("isAuthenticated()")
- @GetMapping("/vote/{id}")
- M : public String questionVote
- S : (Principal principal, @PathVariable("id") Integer id)
- A1 : Question question = this.questionService.getQuestion(id);
- A2 : SiteUser siteUser = this.questionService.getUser(principal.getName());
- A3 : this.questionService.vote(question, siteUser);
- R : return String.format("redirect:/question/detail/%s", id);
-
답변 추천
> question_detail.html
답변 수정 위에
- <a href="javascript:void(0);"
- class="recommend btn btn-sm btn-outline-secondary"
- th:data-uri="@{|/answer/vote/${answer.id}|}"></a> 내부
- 추천 <span class="badge rounded-pill bg-success" th:text="${#lists.size(answer.voter)}"></span>
-
> AnswerService에
- M : public void vote
- S : (Answer answer, SiteUser siteUser)
- A1 : answer.getVoter().add(siteUser);
- A2 : this.answerRepository.save(answer);
-
> AnswerController에
- @PreAuthorize("isAuthenticated()")
- @GetMapping("/vote/{id}")
- M : public String answerVote
- S : (Principal principal, @PathVariable("id") Integer id)
- A1 : Answer answer = this.answerService.getAnswer(id);
- A2 : SiteUser siteUser = this.answerService.getUser(principal.getName());
- A3 : this.answerService.vote(answer, siteUser);
- R : return String.format("redirect:/question/detail/%s", answer.getQuestion().getId());
'포트폴리오 > SPRINGBOOT 옛날' 카테고리의 다른 글
3-13 : 마크다운 (0) | 2022.10.13 |
---|---|
3-12 : 앵커 (0) | 2022.10.13 |
03 : GetMapping과 PostMapping (0) | 2022.10.13 |
3-10 수정과 삭제 (0) | 2022.10.10 |
3 - 09 : 글쓴이 표시 (0) | 2022.10.10 |