1 package de.juplo.kafka.payment.transfer.persistence;
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.domain.TransferRepository;
7 import lombok.RequiredArgsConstructor;
8 import lombok.extern.slf4j.Slf4j;
9 import org.springframework.stereotype.Component;
11 import java.util.HashMap;
13 import java.util.Optional;
17 @RequiredArgsConstructor
19 public class InMemoryTransferRepository implements TransferRepository
21 private final Map<Long, String> map = new HashMap<>();
22 private final ObjectMapper mapper;
26 public synchronized void store(Transfer transfer)
29 .ofNullable(map.get(transfer.getId()))
33 throw new IllegalArgumentException("Could not overwrite " + json + " with " + transfer);
38 map.put(transfer.getId(), mapper.writeValueAsString(transfer));
40 catch (JsonProcessingException e)
42 log.error("Could not convert Transfer.class: {}", transfer, e);
47 public synchronized Optional<Transfer> get(Long id)
51 .ofNullable(map.get(id))
55 return mapper.readValue(json, Transfer.class);
57 catch (JsonProcessingException e)
59 throw new RuntimeException("Could not convert JSON: " + json, e);
65 public synchronized void update(Long id, Transfer.State oldState, Transfer.State newState)
67 Transfer transfer = get(id).orElseThrow(() -> new IllegalArgumentException("Could not find transfer " + id));
69 if (transfer.getState() != oldState)
70 throw new IllegalArgumentException(("Unexpectd state for " + transfer + ", expected: " + oldState));
72 transfer.setState(newState);
77 public void remove(Long id)