@Transactional public void withdraw(UUID cardId, BigDecimal amount) { CreditCard creditCard = creditCardRepository.findById(cardId) .orElseThrow(() -> new IllegalStateException("Cannot find card with id " + cardId)); creditCard.withdraw(amount); domainEventPublisher.publish(new CardWithdrawn(cardId, amount)); } }
public CardWithdrawn withdraw(BigDecimal amount) { if (thereIsMoneyToWithdraw(amount)) { usedLimit = usedLimit.add(amount); return new CardWithdrawn(id, amount); } else { throw new NotEnoughMoneyException(id, amount, availableBalance()); } }
CardWithdrawn withdraw(WithdrawalCommand command) { BigDecimal amount = command.getAmount(); if (thereIsMoneyToWithdraw(amount)) { return new CardWithdrawn(cardId, amount); } else { throw new NotEnoughMoneyException(cardId, command.getAmount(), availableBalance()); } }