- Transfer transfer =
- Transfer
- .builder()
- .id(transferDTO.getId())
- .payer(transferDTO.getPayer())
- .payee(transferDTO.getPayee())
- .amount(transferDTO.getAmount())
- .build();
+ DeferredResult<ResponseEntity<?>> result = new DeferredResult<>();
+
+ getTransferUseCase
+ .get(transferDTO.getId())
+ .map(transfer ->
+ CompletableFuture.completedFuture(
+ ResponseEntity
+ .ok()
+ .location(location(transferDTO))
+ .build()))
+ .or(() ->
+ Optional.of(
+ messagingService
+ .send(
+ Transfer
+ .builder()
+ .id(transferDTO.getId())
+ .payer(transferDTO.getPayer())
+ .payee(transferDTO.getPayee())
+ .amount(transferDTO.getAmount())
+ .build())
+ .thenApply($ ->
+ ResponseEntity
+ .created(location(transferDTO))
+ .build())))
+ .get()
+ .thenAccept(responseEntity -> result.setResult(responseEntity))
+ .exceptionally(e ->
+ {
+ result.setErrorResult(e);
+ return null;
+ });