package de.juplo.kafka.payment.transfer.domain;
-import de.juplo.kafka.payment.transfer.ports.GetTransferUseCase;
-import de.juplo.kafka.payment.transfer.ports.HandleTransferUseCase;
-import de.juplo.kafka.payment.transfer.ports.MessagingService;
-import de.juplo.kafka.payment.transfer.ports.TransferRepository;
+import de.juplo.kafka.payment.transfer.ports.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequiredArgsConstructor
-public class TransferService implements HandleTransferUseCase, GetTransferUseCase
+public class TransferService implements CreateTransferUseCase, HandleStateChangeUseCase, GetTransferUseCase
{
private final TransferRepository repository;
private final MessagingService messagingService;
- private void create(Transfer transfer)
+ @Override
+ public void create(Transfer transfer)
{
repository
.get(transfer.getId())
stored -> log.info("transfer already exisits: {}, ignoring: {}", stored, transfer),
() ->
{
+ log.info("creating transfer: {}", transfer);
repository.store(transfer);
- transfer.setState(CREATED);
- messagingService.send(transfer);
+ messagingService.send(transfer.getId(), CREATED);
});
}
Transfer.State state = transfer.getState();
switch (state)
{
- case RECEIVED:
- repository.store(transfer);
- create(transfer);
- break;
-
case CREATED:
repository.store(transfer);
check(transfer);
private void check(Transfer transfer)
{
// TODO: Do some time consuming checks...
- transfer.setState(CHECKED);
- messagingService.send(transfer);
+ messagingService.send(transfer.getId(), CHECKED);
}
public Optional<Transfer> get(Long id)