WIP
[demos/kafka/demos-kafka-payment-system-transfer] / transfer / src / main / java / de / juplo / kafka / payment / transfer / domain / TransferService.java
1 package de.juplo.kafka.payment.transfer.domain;
2
3
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import lombok.RequiredArgsConstructor;
6 import lombok.extern.slf4j.Slf4j;
7 import org.apache.kafka.clients.producer.KafkaProducer;
8 import org.apache.kafka.clients.producer.ProducerRecord;
9 import org.springframework.http.ResponseEntity;
10
11 import java.net.URI;
12 import java.util.UUID;
13
14
15 @Slf4j
16 @RequiredArgsConstructor
17 public class TransferService
18 {
19   private final TransferRepository repository;
20   private final KafkaProducer<UUID, String> producer;
21   private final ObjectMapper mapper;
22   private final String topic;
23
24   public synchronized void initiate(Transfer transfer)
25   {
26     repository
27         .get(transfer.getId())
28         .ifPresentOrElse(
29             stored ->
30             {
31               switch (stored.getState())
32               {
33                 case FAILED:
34               }
35             },
36             () ->
37             {
38             });
39   }
40
41
42   private void create(Transfer transfer)
43   {
44     try
45     {
46       ProducerRecord<UUID, String> record =
47           new ProducerRecord<>(
48               topic,
49               transfer.getId(),
50               mapper.writeValueAsString(transfer));
51
52       producer.send(record, (metadata, exception) ->
53       {
54         if (exception != null)
55         {
56           log.error("Could not place order {}: {}", transfer, exception.toString());
57           result.setErrorResult(exception);
58           return;
59         }
60
61         result.setResult(ResponseEntity.created(URI.create(path + transfer.getId())).build());
62       });
63     }
64     catch (Exception e)
65     {
66       log.error("Unexpected exception!", e);
67       result.setErrorResult(e);
68     }
69
70     return result;
71   }
72 }