import java.util.concurrent.CompletableFuture;
-@RestController
+@RequestMapping(TransferController.PATH)
+@ResponseBody
@RequiredArgsConstructor
@Slf4j
public class TransferController
private final GetTransferUseCase getTransferUseCase;
private final MessagingService messagingService;
+ private final TransferConsumer consumer;
@PostMapping(
- path = PATH,
+ path = "",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public DeferredResult<ResponseEntity<?>> transfer(
.payer(transferDTO.getPayer())
.payee(transferDTO.getPayee())
.amount(transferDTO.getAmount())
- .state(Transfer.State.RECEIVED)
.build())
.thenApply($ ->
ResponseEntity
}
@GetMapping(
- path = PATH + "/{id}",
+ path = "/{id}",
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TransferDTO> get(@PathVariable Long id)
{
return
- getTransferUseCase
- .get(id)
- .map(transfer -> ResponseEntity.ok(TransferDTO.of(transfer)))
- .orElse(ResponseEntity.notFound().build());
+ consumer
+ .uriForKey(Long.toString(id))
+ .map(uri ->
+ {
+ ResponseEntity<TransferDTO> response =
+ ResponseEntity
+ .status(HttpStatus.TEMPORARY_REDIRECT)
+ .location(URI.create(uri + PATH + "/" + id))
+ .build();
+ return response;
+ })
+ .orElseGet(() ->
+ getTransferUseCase
+ .get(id)
+ .map(transfer -> ResponseEntity.ok(TransferDTO.of(transfer)))
+ .orElse(ResponseEntity.notFound().build()));
}
@ResponseStatus(HttpStatus.BAD_REQUEST)