public async Task <TransferMoneyBetweenAccountResponse> TransferMoneyBetweenAccountAsync(TransferMoneyBetweenAccountRequest request) { var currencyRate = await currencyRateService.GetCurrencyRate(new CurrencyRateRequest { FromCurrencyId = request.FromCurrencyId, ToCurrencyId = request.ToCurrencyId }); if (!currencyRate.IsSuccess) { return(new TransferMoneyBetweenAccountResponse { Error = NoCurrencyRateFound, IsSuccess = false }); } var withdrawPayment = await WithdrawPaymentAsync(new WithdrawPaymentRequest { CurrencyId = request.FromCurrencyId, UserId = request.UserId, Amount = request.Amount }); if (!withdrawPayment.IsSuccess) { return(new TransferMoneyBetweenAccountResponse { Error = FailedToRaiseMoney, IsSuccess = false }); } var addPayment = await AddPaymentAsync(new AddPaymentRequest { UserId = request.UserId, CurrencyId = request.ToCurrencyId, Amount = request.Amount *currencyRate.CurrencyRate }); if (!addPayment.IsSuccess) { await AddPaymentAsync(new AddPaymentRequest { Amount = request.Amount, CurrencyId = request.FromCurrencyId, UserId = request.UserId }); return(new TransferMoneyBetweenAccountResponse { Error = FailedToRaiseMoney, IsSuccess = false }); } return(new TransferMoneyBetweenAccountResponse { IsSuccess = true }); }
public async Task <TransferMoneyBetweenAccountResponse> TransferMoneyBetweenAccountAsync([FromBody] TransferMoneyBetweenAccountRequest request) { return(await accountService.TransferMoneyBetweenAccountAsync(request)); }