계좌 삭제 기능 구현

날아올라돼지야·2024년 8월 25일
0

마지막 삭제 기능만 구현하면 계좌에 대한 CRUD가 완성됩니다.

삭제 요구사항

삭제 기능 추가를 위한 코드 작성

1. CustomerRepository에서 findByMobileNumber 메서드 사용

먼저, CustomerRepository에서 findByMobileNumber 메서드를 사용하여 고객 정보를 조회합니다. 입력된 휴대폰 번호로 고객 정보를 찾고, 해당 고객이 존재하지 않으면 ResourceNotFoundException을 던집니다.

Optional<Customer> customerOptional = customerRepository.findByMobileNumber(mobileNumber);
if (!customerOptional.isPresent()) {
    throw new ResourceNotFoundException("Customer not found with mobile number: " + mobileNumber);
}
Customer customer = customerOptional.get();

2. deleteById 및 deleteByCustomerId 메서드를 사용한 삭제 처리

조회된 Customer 엔터티에서 customerId를 가져온 후, 이를 사용해 CustomerRepository와 AccountsRepository에서 데이터를 삭제합니다. 여기서 deleteById는 기본 제공 메서드이지만, deleteByCustomerId는 직접 작성해야 합니다.

// Customer 삭제
customerRepository.deleteById(customer.getCustomerId());

// Account 삭제 (customerId로 삭제)
accountsRepository.deleteByCustomerId(customer.getCustomerId());

3. AccountsRepository에 deleteByCustomerId 메서드 추가

AccountsRepository에 deleteByCustomerId 메서드를 추가합니다. 이 메서드는 customerId를 기반으로 계정을 삭제하며, @Transactional과 @Modifying 애노테이션을 사용하여 데이터베이스 변경을 트랜잭션으로 처리합니다.

@Repository
public interface AccountsRepository extends JpaRepository<Accounts, String> {

    @Transactional
    @Modifying
    void deleteByCustomerId(String customerId);
}

4. 트랜잭션 처리와 예외 처리

@Transactional과 @Modifying 애노테이션을 추가하여 Spring Data JPA가 해당 메서드를 트랜잭션으로 처리하도록 합니다. 이로 인해 실행 중 오류가 발생하면 모든 변경 사항이 롤백됩니다.

@Transactional
@Modifying
public void deleteByCustomerId(String customerId) {
    // 실제 삭제 로직은 Spring Data JPA가 생성
}

5. AccountsController에 삭제 API 엔드포인트 추가

AccountsController 클래스에 삭제 API 엔드포인트를 추가합니다. 이 엔드포인트는 @DeleteMapping을 사용하여 HTTP DELETE 요청을 처리합니다. 삭제 작업이 성공하면 HTTP 200 응답을 반환하며, 실패하면 HTTP 500 오류를 반환합니다.

@RestController
@RequestMapping("/api/accounts")
public class AccountsController {

    @Autowired
    private IAccountService accountService;

    @DeleteMapping("/delete")
    public ResponseEntity<ResponseDto> deleteAccountDetails(@RequestParam String mobileNumber) {
        boolean isDeleted = accountService.deleteAccount(mobileNumber);
        if (isDeleted) {
            return ResponseEntity.ok(new ResponseDto("200", "Request processed successfully"));
        } else {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                                 .body(new ResponseDto("500", "An error occurred, please try again or contact dev team"));
        }
    }
}

6. 서비스 재시작 후 데이터 확인 및 테스트

코드를 빌드하고 애플리케이션을 재시작합니다. 이후, 새로운 계정을 생성하고, 이를 조회한 다음, 삭제 API를 호출하여 계정을 삭제한 후, 다시 조회하여 데이터가 삭제되었는지 확인합니다.

계정 생성 및 조회:

// POST /api/accounts/create (예시 데이터 전송)
// GET /api/accounts/{mobileNumber} (생성된 계정 조회)

계정 삭제:

// DELETE /api/accounts/delete?mobileNumber={mobileNumber} (계정 삭제 요청)

삭제된 계정 정보 조회:

// GET /api/accounts/{mobileNumber} (삭제된 계정 정보 확인 시 404 오류 발생)

이 과정을 통해 계정 삭제 기능이 성공적으로 구현되었음을 확인할 수 있습니다.

CRUD 완성!!!

이렇게 모든 CRUD (Create, Read, Update, Delete) 작업을 마이크로서비스에서 구현하게 되었습니다. 각각의 단계에서 중요한 부분은 트랜잭션 관리를 통해 데이터의 무결성을 유지하는 것이며, 오류 발생 시 롤백을 통해 안전한 데이터 처리를 보장하는 것입니다.

profile
무슨 생각하며 사니

0개의 댓글