Sobes.tech
Middle+

/** * Implementar a transferência de fundos entre duas contas. Tendo em conta que esta é uma solução de produção * Parâmetros de entrada: * @param fromAccountId identificador único do utilizador que transfere fundos * @param toAccountId identificador único do utilizador para quem os fundos são transferidos * @param amount valor da transferência. Número positivo */ public void transferMoney(Long fromAccountId, Long toAccountId, BigDecimal amount) { }

sobes.tech IA

Resposta da IA

Для реализации безопасного перевода средств между счетами в production нужно учитывать:

  • Проверку наличия средств на счете отправителя
  • Атомарность операции (транзакция)
  • Обработку ошибок
  • Логирование и возможное уведомление

Пример реализации на Java с использованием транзакций:

public void transferMoney(Long fromAccountId, Long toAccountId, BigDecimal amount) {
    if (amount.compareTo(BigDecimal.ZERO) <= 0) {
        throw new IllegalArgumentException("Сумма перевода должна быть положительной");
    }

    // Начинаем транзакцию
    transactionTemplate.execute(status -> {
        Account fromAccount = accountRepository.findById(fromAccountId)
            .orElseThrow(() -> new IllegalArgumentException("Отправитель не найден"));
        Account toAccount = accountRepository.findById(toAccountId)
            .orElseThrow(() -> new IllegalArgumentException("Получатель не найден"));

        if (fromAccount.getBalance().compareTo(amount) < 0) {
            throw new IllegalStateException("Недостаточно средств на счете отправителя");
        }

        fromAccount.setBalance(fromAccount.getBalance().subtract(amount));
        toAccount.setBalance(toAccount.getBalance().add(amount));

        accountRepository.save(fromAccount);
        accountRepository.save(toAccount);

        // Можно добавить логирование операции
        return null;
    });
}

Такой подход гарантирует, что либо оба баланса обновятся, либо при ошибке изменения не будут сохранены. Важно использовать транзакции и проверять входные данные.