스프링

게시판 작성 코드(컨트롤러)

오시리엔 2023. 8. 21. 09:38

//등록(새글 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