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.CHECKED;
11 import static de.juplo.kafka.payment.transfer.domain.Transfer.State.CREATED;
15 @RequiredArgsConstructor
16 public class TransferService implements CreateTransferUseCase, HandleStateChangeUseCase, GetTransferUseCase
18 private final TransferRepository repository;
19 private final MessagingService messagingService;
22 public void create(Transfer transfer)
25 .get(transfer.getId())
27 stored -> log.info("transfer already exisits: {}, ignoring: {}", stored, transfer),
30 log.info("creating transfer: {}", transfer);
31 repository.store(transfer);
32 messagingService.send(transfer.getId(), CREATED);
37 public void handle(Transfer transfer)
39 Transfer.State state = transfer.getState();
43 repository.store(transfer);
48 repository.store(transfer);
49 // TODO: What's next...?
53 log.warn("TODO: handle {} state {}", state.foreign ? "foreign" : "domain", state);
57 private void check(Transfer transfer)
59 // TODO: Do some time consuming checks...
60 messagingService.send(transfer.getId(), CHECKED);
63 public Optional<Transfer> get(Long id)
65 return repository.get(id);