spring boot 게시판 - 9 <게시물 수정, 삭제>

2022. 11. 30. 17:36·Java/Spring Boot 게시판

2022.11.30 - [Java/spring 게시판] - spring boot 게시판 - 8 <게시물 작성, 조회>

 

spring boot 게시판 - 8 <게시물 작성, 조회>

2022.11.24 - [Java/spring 게시판] - spring boot 게시판 - 7 spring boot 게시판 - 7 2022.11.22 - [Java/spring 게시판] - spring boot 게시판 - 6 spring boot 게시판 - 6 https://magicmk.tistory.com/32 spring boot 게시판 - 5 https://magicmk.t

magicmk.tistory.com

게시물 작성, 조회에 이어 바로 수정, 삭제를 작성한다.


✅게시물 수정

수정의 경우에는 작성자가 아닌 유저가 수정을 해서는 안되기 때문에 인증 과정을

컨트롤러에 넣어주었다.

 

또한 상세 조회 페이지에서 사용했던 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

 

GitHub - Kimmingki/board: 강의만 듣다 때려치우지 말고 조금씩이라도 개발해보자...!!

강의만 듣다 때려치우지 말고 조금씩이라도 개발해보자...!! Contribute to Kimmingki/board development by creating an account on GitHub.

github.com

 

저작자표시 비영리 (새창열림)

'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
'Java/Spring Boot 게시판' 카테고리의 다른 글
  • spring boot 게시판 - 11 <게시물 검색 페이징 처리>
  • spring boot 게시판 - 10 <JPA Pageable, thymeleaf>
  • spring boot 게시판 - 8 <게시물 작성, 조회>
  • spring boot 게시판 - 7 <회원 정보 수정 및 탈퇴>
요술공주밍키
요술공주밍키
조금씩이라도 꾸준히..
  • 요술공주밍키
    삽질의흔적
    요술공주밍키
  • 전체
    오늘
    어제
    • 분류 전체보기 (139)
      • Java (42)
        • Spring Boot (14)
        • Spring Boot 게시판 (14)
        • 공중화장실 찾기 (4)
        • 쇼핑몰 (8)
      • JavaScript (8)
        • NodeJS (2)
      • Python (5)
        • Django (4)
      • Server (10)
        • Docker (4)
        • K8S (0)
        • Jenkins (1)
      • 알고리즘 (24)
        • 프로그래머스 (19)
        • 백준 (5)
      • Etc (21)
        • 개발 팁 (1)
      • 일상 (27)
        • 독서 포스트 (25)
        • 회고록 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
요술공주밍키
spring boot 게시판 - 9 <게시물 수정, 삭제>
상단으로

티스토리툴바