ec293ad53cb65b3fdcbd7bea17a1636397339fd0
[demos/kafka/demos-kafka-payment-system-transfer] / src / main / java / de / juplo / kafka / payment / transfer / persistence / InMemoryTransferRepository.java
1 package de.juplo.kafka.payment.transfer.persistence;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import de.juplo.kafka.payment.transfer.domain.Transfer;
6 import de.juplo.kafka.payment.transfer.ports.TransferRepository;
7 import lombok.RequiredArgsConstructor;
8 import lombok.extern.slf4j.Slf4j;
9 import org.springframework.stereotype.Component;
10
11 import java.util.HashMap;
12 import java.util.Map;
13 import java.util.Optional;
14
15
16 @Component
17 @RequiredArgsConstructor
18 @Slf4j
19 public class InMemoryTransferRepository implements TransferRepository
20 {
21   private final Map<Long, String> map = new HashMap<>();
22   private final ObjectMapper mapper;
23
24
25   @Override
26   public void store(Transfer transfer)
27   {
28     try
29     {
30       map.put(transfer.getId(), mapper.writeValueAsString(transfer));
31     }
32     catch (JsonProcessingException e)
33     {
34       throw new RuntimeException(e);
35     }
36   }
37
38   @Override
39   public Optional<Transfer> get(Long id)
40   {
41     return
42         Optional
43             .ofNullable(map.get(id))
44             .map(json -> {
45               try
46               {
47                 return mapper.readValue(json, Transfer.class);
48               }
49               catch (JsonProcessingException e)
50               {
51                 throw new RuntimeException("Could not convert JSON: " + json, e);
52               }
53             });
54   }
55
56   @Override
57   public void remove(Long id)
58   {
59     map.remove(id);
60   }
61 }