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;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fpayment%2Ftransfer%2Fadapter%2FTransferController.java;h=8240310c7d0f4c7c1e90b96323f88a32ceb5d2c9;hp=f31d1a8fb0570ebcbec1e4e3a74e02added53e31;hb=fae41770a1f65b4ddfe8d51d09a8a8cdc35a5bdd;hpb=4467c5240397a47b181106a0ae902ed1b71d0c5d 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 f31d1a8..8240310 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 @@ -3,7 +3,7 @@ package de.juplo.kafka.payment.transfer.adapter; import de.juplo.kafka.payment.transfer.domain.Transfer; import de.juplo.kafka.payment.transfer.ports.GetTransferUseCase; -import de.juplo.kafka.payment.transfer.ports.ReceiveTransferUseCase; +import de.juplo.kafka.payment.transfer.ports.MessagingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -20,6 +20,8 @@ import java.net.URI; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; @RestController @@ -29,8 +31,8 @@ import java.util.Map; { public final static String PATH = "/transfers"; - private final ReceiveTransferUseCase receiveTransferUseCase; private final GetTransferUseCase getTransferUseCase; + private final MessagingService messagingService; @PostMapping( @@ -41,36 +43,48 @@ import java.util.Map; HttpServletRequest request, @Valid @RequestBody TransferDTO transferDTO) { - Transfer transfer = - Transfer - .builder() - .id(transferDTO.getId()) - .payer(transferDTO.getPayer()) - .payee(transferDTO.getPayee()) - .amount(transferDTO.getAmount()) - .build(); - DeferredResult> result = new DeferredResult<>(); - receiveTransferUseCase - .receive(transfer) - .thenApply( - $ -> + getTransferUseCase + .get(transferDTO.getId()) + .map(transfer -> + CompletableFuture.completedFuture( ResponseEntity - .created(URI.create(PATH + "/" + transferDTO.getId())) - .build()) - .thenAccept( - responseEntity -> result.setResult(responseEntity)) - .exceptionally( - e -> - { - result.setErrorResult(e); - return null; - }); + .ok() + .location(location(transferDTO)) + .build())) + .or(() -> + Optional.of( + messagingService + .send( + Transfer + .builder() + .id(transferDTO.getId()) + .payer(transferDTO.getPayer()) + .payee(transferDTO.getPayee()) + .amount(transferDTO.getAmount()) + .state(Transfer.State.RECEIVED) + .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()); + } + @GetMapping( path = PATH + "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)