Beispiel #1
0
        public async Task <ServiceResponse <AccountBalance> > AddAmount(AccountBalance accountBalance)
        {
            try
            {
                accountBalance.AccountBalanceId = 0; //Identity column
                //Adding data into transaction table to capture transaction history
                TransactionAudit audit = new TransactionAudit();
                audit.ActionId    = 1; // FirstTime Add Amount
                audit.CustomerId  = accountBalance.CustomerId;
                audit.Balance     = accountBalance.Balance;
                audit.CreatedDate = DateTime.Now;
                await _bankDbContext.TransactionAudits.AddAsync(audit);

                await _bankDbContext.AccountBalances.AddAsync(accountBalance);

                await _bankDbContext.SaveChangesAsync();

                serviceResponse.Data    = accountBalance;
                serviceResponse.Message = $"First time amount added successfully...Balance is {accountBalance.Balance}";
                return(serviceResponse);
            }
            catch (Exception ex)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = ex.Message;
                return(serviceResponse);
            }
        }
Beispiel #2
0
        public async Task <ServiceResponse <AccountBalance> > WithdrawAccountBalance(AccountBalance accountBalance)
        {
            try
            {
                var withdrawAccountDetails = await _bankDbContext.AccountBalances.Include(x => x.Customer)
                                             .ThenInclude(x => x.Account)
                                             .FirstOrDefaultAsync(x => x.AccountNumber == accountBalance.AccountNumber && x.AccountId == accountBalance.AccountId);

                if (withdrawAccountDetails != null)
                {
                    if (withdrawAccountDetails.Balance < accountBalance.Balance)
                    {
                        serviceResponse.Success = false;
                        serviceResponse.Message = $"Insufficient funds.... Available balance in your account is {withdrawAccountDetails.Balance}";
                        return(serviceResponse);
                    }
                    else
                    {
                        accountBalance.AccountBalanceId = 0; //Identity column
                        //Adding data into transaction table to capture transaction history
                        TransactionAudit audit = new TransactionAudit();
                        audit.ActionId    = 3; //Withdraw
                        audit.CustomerId  = withdrawAccountDetails.CustomerId;
                        audit.Balance     = accountBalance.Balance;
                        audit.CreatedDate = DateTime.Now;
                        await _bankDbContext.TransactionAudits.AddAsync(audit);

                        withdrawAccountDetails.Balance = (withdrawAccountDetails.Balance - accountBalance.Balance);
                        _bankDbContext.AccountBalances.Update(withdrawAccountDetails);
                        await _bankDbContext.SaveChangesAsync();

                        serviceResponse.Data    = withdrawAccountDetails;
                        serviceResponse.Message = $"Amount {accountBalance.Balance} withdrawn successfull.. Available balance is {withdrawAccountDetails.Balance}";
                        return(serviceResponse);
                    }
                }
                serviceResponse.Success = false;
                serviceResponse.Message = $"Invalid account number (or) AccountId... Please enter valid account details to withdraw.";
                return(serviceResponse);
            }
            catch (Exception ex)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = ex.Message;
                return(serviceResponse);
            }
        }
        /// <summary>Ensures the transaction audit asynchronous.</summary>
        /// <returns></returns>
        protected virtual async Task <TransactionAudit> EnsureTransactionAuditAsync()
        {
            if (null == _currenTransactionAudit)
            {
                var t = new TransactionAudit()
                {
                    Author        = Author,
                    UtcDateTime   = DateTime.UtcNow,
                    StrIdentifier = Identifier
                };
                var e = await TransactionAudits.AddAsync(t);
                await SaveChangesAsync(true, CancellationToken);

                _currenTransactionAudit = e.Entity;
            }

            return(_currenTransactionAudit);
        }
Beispiel #4
0
        public async Task <ServiceResponse <AccountBalance> > DepositAccountBalance(AccountBalance accountBalance)
        {
            try
            {
                var depositAccountDetails = await _bankDbContext.AccountBalances.Include(x => x.Customer)
                                            .ThenInclude(x => x.Account)
                                            .FirstOrDefaultAsync(x => x.AccountNumber == accountBalance.AccountNumber && x.AccountId == accountBalance.AccountId);

                if (depositAccountDetails != null)
                {
                    accountBalance.AccountBalanceId = 0; //Identity column
                    //Adding data into transaction table to capture transaction history
                    TransactionAudit audit = new TransactionAudit();
                    audit.ActionId    = 2; //Deposit
                    audit.CustomerId  = depositAccountDetails.CustomerId;
                    audit.Balance     = accountBalance.Balance;
                    audit.CreatedDate = DateTime.Now;
                    await _bankDbContext.TransactionAudits.AddAsync(audit);

                    depositAccountDetails.Balance = (depositAccountDetails.Balance + accountBalance.Balance);
                    _bankDbContext.AccountBalances.Update(depositAccountDetails);
                    await _bankDbContext.SaveChangesAsync();

                    serviceResponse.Data    = depositAccountDetails;
                    serviceResponse.Message = $"Amount {accountBalance.Balance} deposited successfully..Total available balance is {depositAccountDetails.Balance}";
                    return(serviceResponse);
                }
                serviceResponse.Success = false;
                serviceResponse.Message = $"Invalid account number (or) AccountId... Please enter valid account details to deposit.";
                return(serviceResponse);
            }
            catch (Exception ex)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = ex.Message;
                return(serviceResponse);
            }
        }