1 package de.juplo.kafka.payment.transfer.domain;
4 import de.juplo.kafka.payment.transfer.ports.*;
5 import lombok.RequiredArgsConstructor;
6 import lombok.extern.slf4j.Slf4j;
8 import java.util.Optional;
10 import static de.juplo.kafka.payment.transfer.domain.Transfer.State.*;
14 @RequiredArgsConstructor
15 public class TransferService implements CreateTransferUseCase, HandleStateChangeUseCase, GetTransferUseCase
17 private final TransferRepository repository;
18 private final MessagingService messagingService;
21 public void create(Transfer transfer)
24 .get(transfer.getId())
26 stored -> log.info("transfer already exisits: {}, ignoring: {}", stored, transfer),
29 repository.store(transfer);
30 messagingService.send(transfer.getId(), CREATED);
35 public void handle(Transfer transfer)
37 Transfer.State state = transfer.getState();
41 repository.store(transfer);
46 repository.store(transfer);
47 // TODO: What's next...?
51 log.warn("TODO: handle {} state {}", state.foreign ? "foreign" : "domain", state);
55 private void check(Transfer transfer)
57 // TODO: Do some time consuming checks...
58 messagingService.send(transfer.getId(), CHECKED);
61 public Optional<Transfer> get(Long id)
63 return repository.get(id);