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=f31d1a8fb0570ebcbec1e4e3a74e02added53e31;hp=e20f9bf9caf5bc94969ff26b7f9f6ef2a727758c;hb=4467c5240397a47b181106a0ae902ed1b71d0c5d;hpb=540f0c5e8ef2c815d7ff37c7af2e119c448cbb1b 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 e20f9bf..f31d1a8 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.InitiateTransferUseCase; +import de.juplo.kafka.payment.transfer.ports.ReceiveTransferUseCase; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -12,6 +12,7 @@ import org.springframework.http.ResponseEntity; 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 javax.servlet.http.HttpServletRequest; import javax.validation.Valid; @@ -28,7 +29,7 @@ import java.util.Map; { public final static String PATH = "/transfers"; - private final InitiateTransferUseCase initiateTransferUseCase; + private final ReceiveTransferUseCase receiveTransferUseCase; private final GetTransferUseCase getTransferUseCase; @@ -36,7 +37,9 @@ import java.util.Map; path = PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity transfer(@Valid @RequestBody TransferDTO transferDTO) + public DeferredResult> transfer( + HttpServletRequest request, + @Valid @RequestBody TransferDTO transferDTO) { Transfer transfer = Transfer @@ -47,9 +50,25 @@ import java.util.Map; .amount(transferDTO.getAmount()) .build(); - initiateTransferUseCase.initiate(transfer); + DeferredResult> result = new DeferredResult<>(); + + receiveTransferUseCase + .receive(transfer) + .thenApply( + $ -> + ResponseEntity + .created(URI.create(PATH + "/" + transferDTO.getId())) + .build()) + .thenAccept( + responseEntity -> result.setResult(responseEntity)) + .exceptionally( + e -> + { + result.setErrorResult(e); + return null; + }); - return ResponseEntity.created(URI.create(PATH + "/" + transferDTO.getId())).build(); + return result; } @GetMapping(