공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.
상담 삭제 기능을 구현하여 등록된 상담 정보를 삭제할 수 있도록 한다. 상담 데이터는 실제로 삭제되지 않고 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. 실행 테스트
대출 상담 삭제 기능에 대한 테스트를 통해, 삭제 요청이 정상적으로 처리되고 이미 삭제된 상담에 대한 중복 삭제 요청 시 에러가 발생하는 것을 확인한다.
- 상담 삭제 요청을 처음 실행했을 때 정상적으로 삭제가 처리된다.
- 이미 삭제된 상담을 다시 삭제 요청하면 에러가 반환되는 것을 확인할 수 있다.
'BackEnd > Project' 카테고리의 다른 글
[Loan] Ch03. 대출 신청 등록 기능 구현 (0) | 2024.09.11 |
---|---|
[Loan] Ch03. 대출 신청 도메인 테이블 정의 (1) | 2024.09.11 |
[Loan] Ch02. 대출 상담 수정 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 조회 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 등록 기능 구현 (1) | 2024.09.11 |