Exemple #1
0
        public TransactionInfo WidthDrawalFromAccount(Claim claim, TransactionRequest request)
        {
            if (request.Amount <= 0)
            {
                throw new Exception("Amount to withdraw cannot 0 or negative");
            }
            Users accountUser       = _accountMapper.GetAccountNumberByUserName(claim);
            var   accountToWithDraw = _unitOfWork.Accounts
                                      .GetFiltered(i => i.AccountId == accountUser.Account).FirstOrDefault();

            if (request.Amount > accountToWithDraw.Balance)
            {
                throw new Exception("Amount to withdraw is greater that account balance");
            }
            accountToWithDraw.Balance -= request.Amount;

            var transactionLog = new TransactionLog
            {
                DestinationAccount = accountToWithDraw.AccountId,
                TransactionType    = TransactionTypes.WithDrawal,
                UserName           = accountUser.UserName,
                Date   = DateTime.Now,
                Amount = request.Amount
            };

            _unitOfWork.TransactionLog.Add(transactionLog);
            _unitOfWork.Commit();
            return(new TransactionInfo
            {
                PrimaryAccount = accountToWithDraw.AccountId,
                PrimaryAccountBalance = accountToWithDraw.Balance,
                TransactionType = TransactionTypes.WithDrawal
            });
        }
Exemple #2
0
        public TransactionInfo DepositToAccount(Claim claim, TransactionRequest request)
        {
            if (request.Amount <= 0)
            {
                throw new NullReferenceException("Amount to deposit must be greater than 0");
            }
            Users accountUser = _accountMapper.GetAccountNumberByUserName(claim);
            var   account     = _unitOfWork.Accounts.GetFiltered(i => i.AccountId == accountUser.Account).FirstOrDefault();

            account.Balance += request.Amount;



            var transactionLog = new TransactionLog
            {
                DestinationAccount = account.AccountId,
                TransactionType    = TransactionTypes.Deposit,
                UserName           = accountUser.UserName,
                Date   = DateTime.Now,
                Amount = request.Amount
            };

            _unitOfWork.TransactionLog.Add(transactionLog);

            _unitOfWork.Commit();
            return(new TransactionInfo
            {
                PrimaryAccount = account.AccountId,
                PrimaryAccountBalance = account.Balance,
                TransactionType = TransactionTypes.Deposit
            });
        }
Exemple #3
0
        public TransactionInfo WireTransferToAccount(Claim claim, TransactionRequest request)
        {
            if (request.Amount <= 0)
            {
                throw new NullReferenceException("Amount to transfer must be greater than 0");
            }
            Users accountUser = _accountMapper.GetAccountNumberByUserName(claim);
            var   accounts    = _unitOfWork.Accounts
                                .GetFiltered(i => i.AccountId == accountUser.Account || i.AccountId == request.AccountToTransfer);
            var accountToRemote = accounts.FirstOrDefault(i => i.AccountId == accountUser.Account);
            var accountToAdd    = accounts.FirstOrDefault(i => i.AccountId == request.AccountToTransfer);

            if (accountToAdd == null)
            {
                return new TransactionInfo
                       {
                           TransactionException = new Exception("Account to Transfer does not exists")
                       }
            }
            ;
            accountToRemote.Balance -= request.Amount;
            accountToAdd.Balance    += request.Amount;

            var transactionLog = new TransactionLog
            {
                DestinationAccount = accountToAdd.AccountId,
                SourceAccount      = accountToRemote.AccountId,
                TransactionType    = TransactionTypes.WireTransfer,
                UserName           = accountUser.UserName,
                Date   = DateTime.Now,
                Amount = request.Amount
            };

            _unitOfWork.TransactionLog.Add(transactionLog);

            _unitOfWork.Commit();
            return(new TransactionInfo {
                PrimaryAccount = accountToRemote.AccountId,
                PrimaryAccountBalance = accountToRemote.Balance,
                SecondaryAccount = accountToAdd.AccountId,
                TransactionType = TransactionTypes.WireTransfer
            });
        }
    }
Exemple #4
0
        public TransactionInfo GetAccountBalance(Claim claim)
        {
            Users accountUser    = _accountMapper.GetAccountNumberByUserName(claim);
            var   account        = _unitOfWork.Accounts.GetFiltered(i => i.AccountId == accountUser.Account).FirstOrDefault();
            var   transactionLog = new TransactionLog
            {
                DestinationAccount = account.AccountId,
                TransactionType    = TransactionTypes.Query,
                UserName           = accountUser.UserName,
                Date = DateTime.Now,
            };

            _unitOfWork.TransactionLog.Add(transactionLog);
            _unitOfWork.Commit();
            return(new TransactionInfo
            {
                PrimaryAccount = account.AccountId,
                PrimaryAccountBalance = account.Balance,
                TransactionType = TransactionTypes.Query
            });
        }