Untitled
unknown
plain_text
3 years ago
2.2 kB
10
Indexable
@PostMapping("/transfer/make")
String processMakeTransferForm(@Valid Transfer transfer, BindingResult result) {
Account fromAccount = transfer.getFromAccount();
Account toAccount = transfer.getToAccount();
LocalDateTime transferDate = LocalDateTime.now(ZoneId.of("Europe/Warsaw"));
if (result.hasErrors()) {
return "user/list";
}
transfer.setTransferDate(transferDate);
BigDecimal originalAmount = transfer.getOriginalAmount();
BigDecimal finalAmount = null;
String fromCurrency = fromAccount.getCurrency();
String toCurrency = toAccount.getCurrency();
switch (fromCurrency) {
case "PLN":
if (toCurrency.equals("USD")) {
finalAmount = originalAmount.divide(PL_USD_EXCHANGE_RATE, 2, RoundingMode.HALF_UP);
break;
}
finalAmount = originalAmount.divide(PL_EUR_EXCHANGE_RATE, 2, RoundingMode.HALF_UP);
break;
case "USD":
if (toCurrency.equals("PLN")) {
finalAmount = originalAmount.multiply(PL_USD_EXCHANGE_RATE);
break;
}
finalAmount = originalAmount.divide(USD_EUR_EXCHANGE_RATE, 2, RoundingMode.HALF_UP);
break;
case "EUR":
if (toCurrency.equals("PLN")) {
finalAmount = originalAmount.multiply(PL_EUR_EXCHANGE_RATE);
break;
}
finalAmount = originalAmount.multiply(USD_EUR_EXCHANGE_RATE);
break;
default:
throw new RuntimeException("Unreachable");
}
transfer.setFinalAmount(finalAmount);
transferService.update(transfer);
fromAccount.setBalance(fromAccount.getBalance().subtract(originalAmount));
toAccount.setBalance(toAccount.getBalance().add(finalAmount));
accountService.update(fromAccount);
accountService.update(toAccount);
return "redirect:/account/list";
}Editor is loading...