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.InitiateTransferUseCase;
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.*;
17 @RequiredArgsConstructor
18 public class TransferService implements InitiateTransferUseCase, GetTransferUseCase
20 private final TransferRepository repository;
21 private final MessagingService messagingService;
23 public synchronized void initiate(Transfer transfer)
26 .get(transfer.getId())
30 if (!transfer.equals(stored))
31 throw new IllegalArgumentException(
32 "Re-Initiation of transfer with different data: old=" +
37 if (stored.getState() == FAILED)
39 repository.update(transfer.getId(), FAILED, SENT);
40 log.info("Resending faild transfer: " + stored);
47 transfer.setState(SENT);
48 repository.store(transfer);
52 private void send(Transfer transfer)
59 repository.update(transfer.getId(), SENT, PENDING);
65 repository.update(transfer.getId(), SENT, FAILED);
70 public Optional<Transfer> get(Long id)
72 return repository.get(id);