示例#1
0
        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));
        }
示例#2
0
        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));
        }