1 package de.juplo.kafka.payment.transfer.ports;
4 import de.juplo.kafka.payment.transfer.adapter.TransferStateChangedEvent;
5 import de.juplo.kafka.payment.transfer.domain.Transfer;
6 import lombok.RequiredArgsConstructor;
7 import lombok.extern.slf4j.Slf4j;
9 import java.util.Optional;
11 import static de.juplo.kafka.payment.transfer.domain.Transfer.State.CHECKED;
12 import static de.juplo.kafka.payment.transfer.domain.Transfer.State.CREATED;
16 @RequiredArgsConstructor
17 public class TransferService implements CreateTransferUseCase, HandleStateChangeUseCase, GetTransferUseCase
19 private final TransferRepository repository;
20 private final MessagingService messagingService;
23 public Optional<TransferStateChangedEvent> create(Long id, Long payer, Long payee, Integer amount)
31 "transfer already exisits: {}, ignoring: id={}, payer={}, payee={}, amount={}",
36 return Optional.empty();
40 log.info("creating transfer: {}", transfer);
42 TransferStateChangedEvent
51 public TransferStateChangedEvent handleStateChange(Long id, Transfer.State state)
61 transfer.setState(CREATED);
62 repository.store(transfer);
68 transfer.setState(CHECKED);
69 repository.store(transfer);
70 // TODO: What's next...?
75 log.warn("TODO: handle {} state {}", state.foreign ? "foreign" : "domain", state);
78 () -> log.error("unknown transfer: {}", id));
81 private void check(Transfer transfer)
83 // TODO: Do some time consuming checks...
84 messagingService.send(transfer.getId(), CHECKED);
87 public Optional<Transfer> get(Long id)
89 return repository.get(id);