X-Git-Url: https://juplo.de/gitweb/?p=demos%2Fkafka%2Fdemos-kafka-payment-system-transfer;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fpayment%2Ftransfer%2Fadapter%2FTransferController.java;h=e60ba949da5bf7e3be4f6ae83ffffebfbfa8ba64;hp=d81c554043cefbfabd464b2bb2bb56c92d08d08a;hb=19aec49a7f3a46f55e696a5a930c48883c4f1cd2;hpb=a9a2158de30cb47c96cfabf06c797d81a352a1e1 diff --git a/src/main/java/de/juplo/kafka/payment/transfer/adapter/TransferController.java b/src/main/java/de/juplo/kafka/payment/transfer/adapter/TransferController.java index d81c554..e60ba94 100644 --- a/src/main/java/de/juplo/kafka/payment/transfer/adapter/TransferController.java +++ b/src/main/java/de/juplo/kafka/payment/transfer/adapter/TransferController.java @@ -13,6 +13,8 @@ import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.async.DeferredResult; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; @@ -35,21 +37,36 @@ import java.util.concurrent.CompletableFuture; private final GetTransferUseCase getTransferUseCase; private final MessagingService messagingService; private final TransferConsumer consumer; + private final WebClient webClient; @PostMapping( path = "", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public DeferredResult> transfer( - HttpServletRequest request, - @Valid @RequestBody TransferDTO transferDTO) + public DeferredResult> transfer(@Valid @RequestBody TransferDTO transferDTO) { DeferredResult> result = new DeferredResult<>(); - getTransferUseCase - .get(transferDTO.getId()) - .map(transfer -> + Long id = transferDTO.getId(); + + 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.empty())) + .or(() -> Optional.of(getTransferUseCase.get(transferDTO.getId()).map(transfer -> Boolean.TRUE))) + .flatMap(optional -> optional) + .map($ -> CompletableFuture.completedFuture( ResponseEntity .ok()