Untitled

 avatar
unknown
plain_text
3 years ago
2.2 kB
7
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...