+ consumer
+ .uriForKey(id.toString())
+ .map(uri ->
+ webClient.get()
+ .uri(uri + PATH + "/" + id)
+ .accept(MediaType.APPLICATION_JSON)
+ .retrieve()
+ .onStatus(status -> true, bar -> Mono.empty())
+ .toBodilessEntity()
+ .blockOptional()
+ .flatMap(resp ->
+ resp.getStatusCode().is2xxSuccessful()
+ ? Optional.of(Boolean.TRUE)
+ : Optional.<Boolean>empty()))
+ .or(() -> Optional.of(getTransferUseCase.get(transferDTO.getId()).map(transfer -> Boolean.TRUE)))
+ .flatMap(optional -> optional)
+ .map($ ->
+ 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;
+ });
+
+ return result;
+ }
+
+ private URI location(TransferDTO transferDTO)
+ {
+ return URI.create(PATH + "/" + transferDTO.getId());