2022.11.30 - [Java/spring 게시판] - spring boot 게시판 - 8 <게시물 작성, 조회>
게시물 작성, 조회에 이어 바로 수정, 삭제를 작성한다.
✅게시물 수정
수정의 경우에는 작성자가 아닌 유저가 수정을 해서는 안되기 때문에 인증 과정을
컨트롤러에 넣어주었다.
또한 상세 조회 페이지에서 사용했던 DTO를 그대로 사용한 뒤 thymeleaf에서 제목과 내용만
Disable을 해제하여 수정할 수 있도록 만들었다.
🟧Controller
⏹️ BoardController.java
/**
* 게시글 수정
* @param id 게시글 ID
* @param model
* @param authentication 유저 정보
* @return 게시글 수정 페이지
*/
@GetMapping("/{id}/update")
public String boardUpdateForm(@PathVariable Long id, Model model, Authentication authentication) {
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
BoardResponseDTO result = boardService.boardDetail(id);
if (result.getEmail() != userDetails.getUsername()) {
return "redirect:/";
}
model.addAttribute("dto", result);
model.addAttribute("id", id);
return "board/update";
}
/**
* 게시글 수정 post
* @param id 게시글 ID
* @param boardWriteRequestDTO 수정 정보
* @return 게시글 상세 조회 페이지
*/
@PostMapping("/{id}/update")
public String boardUpdate(@PathVariable Long id, BoardWriteRequestDTO boardWriteRequestDTO) {
boardService.boardUpdate(id, boardWriteRequestDTO);
return "redirect:/board/" + id;
}
GetMapping 같은 경우는 상세 조회와 비슷하게 진행하였고 유저 인증 부분만 추가하였다.
🟧Service & Domain
⏹️ BoardServiceImpl.java
@Override
public Long boardUpdate(Long id, BoardWriteRequestDTO boardWriteRequestDTO) {
Board board = boardRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("존재하지 않는 게시글입니다."));
board.update(boardWriteRequestDTO.getTitle(), boardWriteRequestDTO.getContent());
boardRepository.save(board);
return board.getId();
}
Board domain에 update 메서드를 만들고 수정된 제목과 내용을 건네준 뒤 저장하는 간단한 로직이다.
⏹️ Board.java
public void update(String title, String content) {
this.title = title;
this.content = content;
}
Board domain에 해당 메서드를 넣어준다.
🟧테스트
⏹️ 변경 전
게시글 수정 화면에 들어가면 제목과 내용만 disable이 해제되어 변경할 수 있도록 되어있다.
해당 내용을 "수정해보자" 로 변경하였다.
⏹️ 변경 후
변경함과 동시에 게시글 상세 조회 페이지로 이동되면서 정상적으로 수정된 것을 볼 수 있다.
✅게시물 삭제
삭제는 로직이 간편해서 너무 좋은 것 같다.
🟧Controller & Service
⏹️ BoardController.java
/**
* 게시글 삭제
* @param id 게시글 ID
* @param authentication 유저 정보
* @return
*/
@GetMapping("/{id}/remove")
public String boardRemove(@PathVariable Long id, Authentication authentication) {
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
BoardResponseDTO result = boardService.boardDetail(id);
if (result.getEmail() != userDetails.getUsername()) {
return "redirect:/";
}
boardService.boardRemove(id);
return "redirect:/";
}
삭제 또한 작성자가 아닌 유저가 삭제를 할 수 없도록 인증 과정을 거친 뒤 Service 단으로 id를 넘겨준다.
⏹️ BoardServiceImpl.java
@Override
public void boardRemove(Long id) {
Board board = boardRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("존재하지 않는 게시글입니다."));
boardRepository.delete(board);
}
Service에서는 리턴 해주는 것 없이 해당 게시물을 삭제한다.
🟧테스트
게시글을 삭제 하기 전에는 목록에 존재하다가
게시글을 삭제하고 나면
목록에서 게시글이 없어진 것을 확인할 수 있다.
✅끝
수정과 삭제가 생각보다 양이 적어서 그냥 이전 편과 함께 합칠걸 그랬다. 아무튼 이렇게
게시물에 관련된 내용도 간단히 구현해 보았는데 전반적인 내용은 다 구현한 것 같다.
이제 게시물 검색, 페이징 처리, 조회 수, 댓글, 회원 이미지, 소셜 로그인 등과 같은
부수적인 내용을 넣으면 될 것 같다.
https://github.com/Kimmingki/board
'Java > Spring Boot 게시판' 카테고리의 다른 글
spring boot 게시판 - 11 <게시물 검색 페이징 처리> (2) | 2023.02.23 |
---|---|
spring boot 게시판 - 10 <JPA Pageable, thymeleaf> (0) | 2023.02.21 |
spring boot 게시판 - 8 <게시물 작성, 조회> (0) | 2022.11.30 |
spring boot 게시판 - 7 <회원 정보 수정 및 탈퇴> (2) | 2022.11.24 |
spring boot 게시판 - 6 <bootstrap 적용하기> (0) | 2022.11.22 |