공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.
이번 글에서는 대출 상담 정보를 수정하는 기능을 구현한다. 기존에 등록된 상담 정보를 수정할 수 있도록 CounselController와 CounselService에 필요한 메서드를 추가하고, 테스트 코드를 통해 해당 기능을 검증한다.
1. CounselController 수정
CounselController에 상담 정보를 수정할 수 있는 메서드를 추가한다. 이 메서드는 HTTP PUT 요청을 받아 특정 상담 ID에 해당하는 정보를 수정한다.
@PutMapping("/{counselId}")
public ResponseDTO<Response> update(@PathVariable Long counselId, @RequestBody Request request) {
return ok(counselService.update(counselId, request));
}
- @PutMapping("/{counselId}"): PUT 요청을 받아 해당 counselId의 상담 정보를 수정한다.
- @PathVariable Long counselId: URL 경로에서 상담 ID를 가져온다.
- @RequestBody Request request: 수정할 상담 정보가 담긴 요청 객체를 받는다.
- counselService.update(counselId, request): CounselService의 update 메서드를 호출하여 상담 정보를 수정한다.
2. CounselService에 메서드 추가
CounselService에 상담 정보를 수정하는 메서드를 정의한다.
Response update(Long counselId, Request request);
3. CounselServiceImpl에 구현체 추가
CounselServiceImpl에서 상담 정보를 실제로 수정하는 로직을 구현한다. 먼저, 해당 상담 ID로 데이터를 조회하고, 요청받은 정보로 상담 내용을 수정한 후 데이터베이스에 저장한다.
@Override
public Response update(Long counselId, Request request) {
Counsel counsel = counselRepository.findById(counselId)
.orElseThrow(() -> {
throw new BaseException(ResultType.SYSTEM_ERROR);
});
counsel.setName(request.getName());
counsel.setCellPhone(request.getCellPhone());
counsel.setEmail(request.getEmail());
counsel.setMemo(request.getMemo());
counsel.setAddress(request.getAddress());
counsel.setAddressDetail(request.getAddressDetail());
counsel.setZipCode(request.getZipCode());
counselRepository.save(counsel);
return modelMapper.map(counsel, Response.class);
}
- findById: 해당 counselId로 상담 데이터를 조회하며, 데이터가 없을 경우 BaseException을 던진다.
- set 메서드들: 요청받은 데이터를 사용하여 기존 상담 정보를 수정한다.
- save: 수정된 상담 데이터를 데이터베이스에 저장한다.
- modelMapper.map: 저장된 Counsel 객체를 Response 객체로 변환하여 반환한다.
4. 테스트 코드 추가
상담 정보 수정 기능을 검증하는 테스트 코드를 작성한다.
@Test
void Should_ReturnUpdatedResponseOfExistCounselEntity_When_RequestUpdateExistCounselInfo() {
Long firstId = 1L;
Counsel entity = Counsel.builder()
.counselId(1L)
.name("Member Kim")
.build();
Request request = Request.builder()
.name("Member Kang")
.build();
when(counselRepository.save(ArgumentMatchers.any(Counsel.class))).thenReturn(entity);
when(counselRepository.findById(firstId)).thenReturn(Optional.ofNullable(entity));
Response actual = counselService.update(firstId, request);
assertThat(actual.getCounselId()).isSameAs(firstId);
assertThat(actual.getName()).isSameAs(request.getName());
}
- firstId: 테스트에서 사용할 상담 ID이다.
- Counsel.builder(): 테스트용 상담 엔티티 생성한다.
- Request.builder(): 테스트용 요청 객체 생성한다.
- when: Mockito를 사용하여 counselRepository의 동작을 모의(Mock)한다.
- assertThat: 수정된 상담 정보가 요청된 데이터와 일치하는지 검증한다.
5. API 호출 테스트
1번 상담에 대해 수정 요청을 정상적으로 처리하고, 이후 조회했을 때 수정된 데이터를 성공적으로 가져오는 것을 확인할 수 있다. 이를 통해 상담 수정 기능이 올바르게 동작함을 검증할 수 있다.
'BackEnd > Project' 카테고리의 다른 글
[Loan] Ch03. 대출 신청 도메인 테이블 정의 (1) | 2024.09.11 |
---|---|
[Loan] Ch02. 대출 상담 삭제 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 조회 기능 구현 (0) | 2024.09.11 |
[Loan] Ch02. 대출 상담 등록 기능 구현 (1) | 2024.09.11 |
[Loan] Ch02. 대출 상담 도메인 테이블 정의 (0) | 2024.09.11 |