//등록(새글 or 답글)
//-board_parent라는 항목에 유무에 따라 새글과 답글을 구분하여 처리
@GetMapping("/write")
public String write(HttpSession session, Model model, @RequestParam(required = false) Integer board_parent) {
//답글이라면 원본글정보를 화면에 전달
if(board_parent != null) {
BoardDto orginDto = boardDao.detail(board_parent);
model.addAttribute("orginDto",orginDto);
model.addAttribute("isReply",true);
}
else {
model.addAttribute("isReply",false);
}
String memberId = (String) session.getAttribute("name");
boolean isLogin = memberId != null;
if (isLogin) {
return "/WEB-INF/views/board/write.jsp";
} else {
return "/WEB-INF/views/member/login.jsp";
}
}
@PostMapping("/write")
public String write(@ModelAttribute BoardDto boardDto,
HttpSession session) {
String board_writer =(String) session.getAttribute("name");
int board_no = boardDao.sequence();
boardDto.setBoard_no(board_no);
boardDto.setBoard_writer(board_writer);
//글을 등록하기 전에 새글/답글에 따른 그룹,상위글,차수를 계산
// if(새글) {그룹번호는 글번호
// 상위글번호는 null
// 차수는 0
// }
// else {
// 그룹번호 는 원본글 그룹번호
// 상위글번호는 원본글 번호
// 차수는 원본글 차수 +1
// }
if(boardDto.getBoard_parent() ==null) { //새글일경우
boardDto.setBoard_group(board_no);//그룹번호는 글번호로 설정
//boardDto.setBoard_parent(null)//상위글 번호는 null로 설정
//boardDto.setBoard_depth(0)// 차수 0으로 설정
}
else { //답글일 경우
BoardDto originDto =boardDao.detail(boardDto.getBoard_parent());//그룹번호 는 원본글 그룹번호
boardDto.setBoard_group(originDto.getBoard_group()); //상위글번호는 원본글 번호
//boardDto.setBoard_parent(originDto.getBoard_no());// 상위글번호는 원본글 번호
boardDto.setBoard_depth(originDto.getBoard_depth()+1);// 차수 원본글 차수 +1
}
//이사용자의 마지막 글번호 조회
Integer lastNo = boardDao.selectMax(board_writer);
//글을 등록하고
boardDao.write(boardDto);
//포인트 계산작업
//lastNo가 null이라는 것은 처음 글을 작성했다는 의미
//lastNo가 null이 아니면 조회한다음 시간차 비교
if(lastNo == null) { //처음이라면
memberDao.increaseMeberPoint(board_writer, 50); }//포인트 50점 부여
else {//처음이 아니라면 시간차이를 계산
BoardDto lastDto = boardDao.detail(lastNo);
Timestamp stamp = new Timestamp(lastDto.getBoard_ctime().getTime());
LocalDateTime lastTime = stamp.toLocalDateTime();
LocalDateTime currentTime = LocalDateTime.now();
Duration duration =Duration.between(lastTime, currentTime); //두시간의 차이 구하기
long seconds = duration.getSeconds(); // 차이를 초로 변환
if(seconds>300) { //시간차가 5분(300초)보다 크다면
memberDao.increaseMeberPoint(board_writer, 10); }//포인트 10점 부여}
}
return "redirect:detail?board_no="+board_no;
}
'스프링' 카테고리의 다른 글
스프링의 DTO,MAPPER,DAO 기초 (0) | 2023.08.24 |
---|---|
관리자외 접근을 차단하는 인터셉터 구현 (0) | 2023.08.22 |
스프링 기초 글쓰기 (0) | 2023.08.20 |
스프링 세팅 (0) | 2023.08.20 |