게시글 삭제
이제 대망의 CRUD 의 마지막인 D 이다.
데이터 삭제 시 목적에 삭제할 데이터를 어떻게 처리할지 생각해봐야 한다.
[ 데이터 삭제의 종류 ]
- 데이터를 완전히 지워버리는 Hard Delete
- 데이터는 남겨두고 논리적으로만 삭제하는 Soft Delete
우선 간단하게 Hard Delete 로 구현하자.
PostController
@DeleteMapping("/posts/{postId}")
public void edit(@PathVariable Long postId) {
postService.delete(postId);
}
PostService
public void delete(Long id) {
Post post = postRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 글입니다."));
postRepository.delete(post);
}
PostServiceTest
게시글을 삭제하고 리포지토리를 확인해서 개수가 줄어들었는지 확인하는 테스트 코드를 작성한다.
@DisplayName("게시글 삭제")
@Test
void delete() {
// given
Post post = Post.builder()
.title("미카는 고릴라")
.content("우호우호")
.build();
postRepository.save(post);
// when
postService.delete(post.getId());
// then
assertEquals(0, postRepository.count());
}
테스트 수행 시 우리가 의도한대로 동작하며 테스트가 성공함을 알 수 있다.
PostControllerTest
게시글을 삭제하고 리포지토리를 확인해서 개수가 줄어들었는지 확인하는 테스트 코드를 작성한다.
@DisplayName("게시글 삭제")
@Test
void delete() throws Exception {
// given
Post post = Post.builder()
.title("미카는 고릴라")
.content("우호우호")
.build();
postRepository.save(post);
// expected
mockMvc.perform(
MockMvcRequestBuilders.delete("/posts/{postId}", post.getId())
.contentType(APPLICATION_JSON)
)
.andExpect(status().isOk())
.andDo(print());
}
테스트 수행 시 우리가 의도한대로 동작하며 테스트가 성공함을 알 수 있다.
'API 만들어 보기 > 게시판 API' 카테고리의 다른 글
[예외처리] 예외처리 2 (0) | 2023.09.26 |
---|---|
[예외처리] 예외처리 1 (0) | 2023.09.26 |
[게시글 수정] 게시글 수정 (0) | 2023.09.26 |
[게시글 조회] 페이징 처리 - Querydsl (0) | 2023.09.25 |
[게시글 조회] 페이징 처리 1 (0) | 2023.09.25 |