Git-Hub
https://github.com/braverokmc79/spring_boot_demo2
import.sql
count_of_answer 추가
INSERT INTO USER (ID, USER_ID, PASSWORD , NAME, EMAIL) VALUES(1, 'admin', '1111' , '김민수' , 'kiminsu@gmail.com');
INSERT INTO USER (ID, USER_ID, PASSWORD , NAME, EMAIL) VALUES(2, 'test', '1111' , '홍길동' , 'test@gmail.com');
INSERT INTO QUESTION (id, writer_id, title, contents, datetime, count_of_answer) VALUES(1, 1, '국내에서 RuBy on Rails와 paly 가', 'Ruby on Rails(이하 RoR) 는', CURRENT_TIMESTAMP(), 0);
INSERT INTO QUESTION (id, writer_id, title, contents, datetime, count_of_answer) VALUES(2, 2, '순수', '나는 사실 울었어~ 후회 하면서', CURRENT_TIMESTAMP(), 0);
class Question
countOfAnswer 추가
@JsonProperty
private Integer countOfAnswer =0;
public void addAnswer() {
this.countOfAnswer +=1;
}
public void deleteAnswer(){
this.countOfAnswer -=1;
}
index.html
{{#questions}}
<li>
<div class="wrap">
<div class="main">
<strong class="subject">
<a href="/questions/{{id}}">{{title}}</a>
</strong>
<div class="auth-info">
<i class="icon-add-comment"></i>
<span class="time">{{datetime}}</span>
<a href="/questions/{{id}}" class="author">{{writer}}</a>
</div>
<div class="reply" title="댓글">
<i class="icon-reply"></i>
<span class="point">{{countOfAnswer}}</span>
</div>
</div>
</div>
</li>
{{/questions}}
class ApiAnswerController
question.addAnswer(); question.deleteAnswer();
package net.slipp.web;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import net.slipp.domain.Answer;
import net.slipp.domain.AnswerRepository;
import net.slipp.domain.Question;
import net.slipp.domain.QuestionRepository;
import net.slipp.domain.Result;
import net.slipp.domain.User;
@RestController
@RequestMapping("/api/questions/{questionId}/answers")
public class ApiAnswerController {
@Autowired
private QuestionRepository questionRepository;
@Autowired
private AnswerRepository answerRepository;
@PostMapping("")
public Answer create(@PathVariable Long questionId, String contents, HttpSession session){
if(!HttpSessionUtils.isLoginUser(session)){
return null;
}
User loginUser =HttpSessionUtils.getUserFromSession(session);
Question question =questionRepository.findOne(questionId);
Answer answer =new Answer(loginUser, question, contents);
question.addAnswer();
return answerRepository.save(answer);
}
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long questionId, @PathVariable Long id, HttpSession session){
if(!HttpSessionUtils.isLoginUser(session)){
return Result.fail("로그인해야 합니다.");
}
Answer answer =answerRepository.findOne(id);
User loginUser =HttpSessionUtils.getUserFromSession(session);
if(!answer.isSameWriter(loginUser)){
return Result.fail("자신의 글만 삭제 할 수 있습니다.");
}
answerRepository.delete(id);
Question question =questionRepository.findOne(questionId);
question.deleteAnswer();
questionRepository.save(question);
return Result.ok();
}
}
script.js
function countAnswer(check){
var count =$(".qna-comment-count strong");
var countNum =count.text();
if(check)count.text(parseInt(countNum)+1);
else count.text(parseInt(countNum)-1);
}
function onSuccess(data, status){
console.log(data);
var answerTemplate =$("#answerTemplate").html();
var template =answerTemplate.format(data.writer.userId, data.formattedCreateDate, data.contents, data.questionId, data.id);
$(".qna-comment-slipp-articles").prepend(template);
$("textarea[name=contents]").val("");
countAnswer(true);
}
function deleteAnswer(e){
e.preventDefault();
var url =$(this).attr("href");
console.log("답변 삭제" + url);
var thisDelete=$(this);
$.ajax({
type :'delete',
url: url,
dataType : 'json',
error :function (xhr, status){
console.log("error");
},
success:function(data, status){
console.log(data);
if(data.valid){
thisDelete.closest('article').remove();
countAnswer(false);
}else{
alert(data.errorMessage);
}
}
});
}
댓글 ( 4)
댓글 남기기