본문 바로가기
BackEnd/Project

[Loan] Ch02. 대출 상담 삭제 기능 구현

by 개발 Blog 2024. 9. 11.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

상담 삭제 기능을 구현하여 등록된 상담 정보를 삭제할 수 있도록 한다. 상담 데이터는 실제로 삭제되지 않고 is_deleted 플래그를 설정하여 논리적으로 삭제된다. 이를 통해 데이터 무결성을 유지하면서도 삭제된 데이터를 조회에서 제외한다.

 

1. CounselController 수정

CounselController에 상담 삭제 요청을 처리할 수 있는 메서드를 추가한다.

@DeleteMapping("/{counselId}")
public ResponseDTO<Response> delete(@PathVariable Long counselId) {
    counselService.delete(counselId);
    return ok();
}
  • @DeleteMapping("/{counselId}"): DELETE 요청을 받아 해당 counselId의 상담 정보를 삭제한다.
  • counselService.delete(counselId): CounselService의 delete 메서드를 호출하여 상담 정보를 삭제한다.

2. CounselService에 메서드 추가

CounselService에 상담 삭제 메서드를 정의한다.

void delete(Long counselId);

 

3. CounselServiceImpl에 구현체 추가

CounselServiceImpl에서 상담 삭제 로직을 구현한다. 상담 정보를 조회하고, isDeleted 플래그를 true로 설정한 후 저장한다.

@Override
public void delete(Long counselId) {
    Counsel counsel = counselRepository.findById(counselId)
        .orElseThrow(() -> {
            throw new BaseException(ResultType.SYSTEM_ERROR);
        });
    counsel.setIsDeleted(true);
    counselRepository.save(counsel);
}
  • findById: 해당 counselId로 상담 데이터를 조회하고, 데이터가 없을 경우 BaseException을 던진다.
  • setIsDeleted(true): isDeleted 플래그를 true로 설정하여 상담 정보를 논리적으로 삭제한다.
  • save: 수정된 상담 데이터를 데이터베이스에 저장한다.

4. 테스트 코드 추가

상담 정보 삭제 기능을 검증하는 테스트 코드를 작성한다.

@Test
void Should_DeletedCounselEntity_When_RequestDeleteExistCounselInfo() {

    Long targetId = 1L;

    Counsel entity = Counsel.builder()
            .counselId(1L)
            .build();

    when(counselRepository.save(ArgumentMatchers.any(Counsel.class))).thenReturn(entity);
    when(counselRepository.findById(targetId)).thenReturn(Optional.ofNullable(entity));

    counselService.delete(targetId);

    assertThat(entity.getIsDeleted()).isSameAs(true);
}​
  • targetId: 삭제할 상담 ID이다.
  • Counsel.builder(): 테스트용 상담 엔티티를 생성한다.
  • when: Mockito를 사용하여 counselRepository의 동작을 모의(Mock)한다.
  • assertThat: 삭제된 상담 정보가 isDeleted = true로 설정되었는지 검증한다.

5. 실행 테스트

대출 상담 삭제 기능에 대한 테스트를 통해, 삭제 요청이 정상적으로 처리되고 이미 삭제된 상담에 대한 중복 삭제 요청 시 에러가 발생하는 것을 확인한다.

  • 상담 삭제 요청을 처음 실행했을 때 정상적으로 삭제가 처리된다.
  • 이미 삭제된 상담을 다시 삭제 요청하면 에러가 반환되는 것을 확인할 수 있다.