public async Task <IHttpActionResult> Withdraw(int accountNumber, decimal amount, string currency) { var result = new BankResponseViewModel() { AccountNumber = accountNumber, Successful = false }; var account = await db.Accounts.Where(a => a.AccountNumber == accountNumber).FirstOrDefaultAsync(); var defaultCurrency = await db.Currencies.Where(c => c.CurrencyCode == "USD").Select(r => r.CurrencyCode).FirstOrDefaultAsync(); var accountCurrency = account.Currency.CurrencyCode; var targetCurrency = currency; var balance = account.Currency.CurrencyCode == defaultCurrency ? account.Balance : ConvertToUSD(account.Currency.CurrencyCode, account.Balance); var targetAmount = currency == defaultCurrency ? amount : ConvertToUSD(currency, amount); if (account == null) { result.Message = "Account not found."; } else if (amount <= 0) { result.Message = "Invalid ammount."; } else if (balance < targetAmount) { result.Message = "Insufficient balance."; } else { try { balance -= targetAmount; account.Balance = account.Currency.CurrencyCode == defaultCurrency ? balance : ConvertBackFromUSD(account.Currency.CurrencyCode, balance); db.SaveChanges(); result.Successful = true; result.Balance = account.Balance; result.Currency = account.Currency.CurrencyCode; } catch (Exception ex) { result.Message = ex.Message; } } return(Ok(result)); }
public async Task <IHttpActionResult> Balance(int accountNumber) { var account = await db.Accounts.Where(a => a.AccountNumber == accountNumber).FirstOrDefaultAsync(); var result = new BankResponseViewModel() { AccountNumber = accountNumber, Successful = false }; if (account == null) { result.Message = "Account not found."; } else { result.Successful = true; result.Balance = account.Balance; result.Currency = account.Currency.CurrencyCode; } return(Ok(result)); }