1 package de.juplo.kafka.payment.transfer.domain;
4 import de.juplo.kafka.payment.transfer.ports.GetTransferUseCase;
5 import de.juplo.kafka.payment.transfer.ports.HandleTransferUseCase;
6 import de.juplo.kafka.payment.transfer.ports.MessagingService;
7 import de.juplo.kafka.payment.transfer.ports.TransferRepository;
8 import lombok.RequiredArgsConstructor;
9 import lombok.extern.slf4j.Slf4j;
11 import java.util.Optional;
13 import static de.juplo.kafka.payment.transfer.domain.Transfer.State.CHECKED;
14 import static de.juplo.kafka.payment.transfer.domain.Transfer.State.CREATED;
18 @RequiredArgsConstructor
19 public class TransferService implements HandleTransferUseCase, GetTransferUseCase
21 private final TransferRepository repository;
22 private final MessagingService messagingService;
24 private void create(Transfer transfer)
27 .get(transfer.getId())
29 stored -> log.info("transfer already exisits: {}, ignoring: {}", stored, transfer),
32 repository.store(transfer);
33 transfer.setState(CREATED);
34 messagingService.send(transfer);
39 public void handle(Transfer transfer)
41 Transfer.State state = transfer.getState();
45 repository.store(transfer);
50 repository.store(transfer);
55 repository.store(transfer);
56 // TODO: What's next...?
60 log.warn("TODO: handle {} state {}", state.foreign ? "foreign" : "domain", state);
64 private void check(Transfer transfer)
66 // TODO: Do some time consuming checks...
67 transfer.setState(CHECKED);
68 messagingService.send(transfer);
71 public Optional<Transfer> get(Long id)
73 return repository.get(id);