WIP
[demos/kafka/demos-kafka-payment-system-transfer] / transfer / src / main / java / de / juplo / kafka / payment / transfer / controller / TransferController.java
1 package de.juplo.kafka.payment.transfer.controller;
2
3
4 import de.juplo.kafka.payment.transfer.domain.Transfer;
5 import de.juplo.kafka.payment.transfer.domain.TransferService;
6 import lombok.RequiredArgsConstructor;
7 import lombok.extern.slf4j.Slf4j;
8 import org.springframework.http.MediaType;
9 import org.springframework.http.ResponseEntity;
10 import org.springframework.web.bind.annotation.*;
11
12 import javax.validation.Valid;
13 import java.net.URI;
14
15
16 @RestController
17 @RequiredArgsConstructor
18 @Slf4j
19  public class TransferController
20 {
21   public final static String PATH = "/transfers";
22
23   private final TransferService service;
24
25
26   @PostMapping(
27       path = PATH,
28       consumes = MediaType.APPLICATION_JSON_VALUE,
29       produces = MediaType.APPLICATION_JSON_VALUE)
30   public ResponseEntity<?> transfer(@Valid @RequestBody TransferDTO transferDTO)
31   {
32     Transfer transfer =
33         Transfer
34             .builder()
35             .id(transferDTO.getId())
36             .payer(transferDTO.getPayer())
37             .payee(transferDTO.getPayee())
38             .amount(transferDTO.getAmount())
39             .build();
40
41     service.initiate(transfer);
42
43     return ResponseEntity.created(URI.create(PATH + "/" + transferDTO.getId())).build();
44   }
45
46   @GetMapping(
47       path = PATH + "/{id}",
48       produces = MediaType.APPLICATION_JSON_VALUE)
49   public ResponseEntity<TransferDTO> get(@PathVariable Long id)
50   {
51     return
52         service
53             .get(id)
54             .map(transfer -> ResponseEntity.ok(TransferDTO.of(transfer)))
55             .orElse(ResponseEntity.notFound().build());
56   }
57 }