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 import java.util.Optional;
15
16
17 @RestController
18 @RequiredArgsConstructor
19 @Slf4j
20  public class TransferController
21 {
22   public final static String PATH = "/transfers";
23
24   private final TransferService service;
25
26
27   @PostMapping(
28       path = PATH,
29       consumes = MediaType.APPLICATION_JSON_VALUE,
30       produces = MediaType.APPLICATION_JSON_VALUE)
31   public ResponseEntity<?> transfer(@Valid @RequestBody TransferDTO transferDTO)
32   {
33     Transfer transfer =
34         Transfer
35             .builder()
36             .id(transferDTO.getId())
37             .payer(transferDTO.getPayer())
38             .payee(transferDTO.getPayee())
39             .amount(transferDTO.getAmount())
40             .build();
41
42     service.initiate(transfer);
43
44     return ResponseEntity.created(URI.create(PATH + "/" + transferDTO.getId())).build();
45   }
46
47   @GetMapping(
48       path = PATH + "/{id}",
49       produces = MediaType.APPLICATION_JSON_VALUE)
50   public ResponseEntity<TransferDTO> get(@PathVariable Long id)
51   {
52     return
53         service
54             .get(id)
55             .map(transfer -> ResponseEntity.ok(TransferDTO.of(transfer)))
56             .orElse(ResponseEntity.notFound().build());
57   }
58 }