게시글 삭제

이제 대망의 CRUD 의 마지막인 D 이다.

데이터 삭제 시 목적에 삭제할 데이터를 어떻게 처리할지 생각해봐야 한다.

 

[ 데이터 삭제의 종류 ]

  1. 데이터를 완전히 지워버리는 Hard Delete
  2. 데이터는 남겨두고 논리적으로만 삭제하는 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());
}

 

테스트 수행 시 우리가 의도한대로 동작하며 테스트가 성공함을 알 수 있다.

 

+ Recent posts