示例#1
0
        public void AddCard(CardPM card, string credentialsId)
        {
            if (_context.Cards.Count(x => x.CardSerialNumberId == card.CardSerialNumberId) > 0)
            {
                throw new ValidationException("Card already in use");
            }

            card.AccountNumberIdRef = _accountsRepository.GetAccountForUser(credentialsId).AccountNumberId;

            _context.Cards.Add(card);
            _context.SaveChanges();
        }
示例#2
0
        public void CancelCard(string cardSerialNumber, string credentialsId)
        {
            CardPM    card            = GetCard(cardSerialNumber);
            AccountPM accountLoggedIn = _accountsRepository.GetAccountForUser(credentialsId);

            if (accountLoggedIn.AccountNumberId != card.AccountNumberIdRef)
            {
                throw new ValidationException("Invalid AccountNumberId");
            }

            card.CardState = CardState.Cancelled;
            _context.SaveChanges();
        }
示例#3
0
        public void UpdateCard(CardPM card, string credentialsId)
        {
            CardPM    cardToUpdate    = GetCard(card.CardSerialNumberId);
            AccountPM accountLoggedIn = _accountsRepository.GetAccountForUser(credentialsId);

            if (accountLoggedIn.AccountNumberId != cardToUpdate.AccountNumberIdRef)
            {
                throw new ValidationException("Invalid AccountNumberId");
            }

            cardToUpdate.UpdateCard(card);
            cardToUpdate.AvailablegDailySpendLimit  = cardToUpdate.DailySpendLimit;
            cardToUpdate.AvailableMonthlySpendLimit = cardToUpdate.MonthlySpendLimit;
            _context.SaveChanges();
        }
示例#4
0
        public void RegisterCard(string cardSerialNumberId)
        {
            //Card card = Card.FromJsonString(json);

            if (!Validate.CardSerialNumberValidation(cardSerialNumberId))
            {
                throw new ValidationException("Invalid Card Number");
            }

            CardPM cardpm = new CardPM()
            {
                CardSerialNumberId = cardSerialNumberId,
                CardState          = CardState.Active,
            };

            _cardsRepository.AddCard(cardpm, GetCurrentUserId());
        }
        private int StoreTx(TransactionPM t, AccountPM accountFrom, AccountPM accountTo, CardPM cardFrom, bool useTransaction)
        {
            Action action = () =>
            {
                _context.Transactions.Add(t);
                UpdateAccountBalance(accountFrom.AccountNumberId, accountFrom.Balance = accountFrom.Balance - t.Amount);
                UpdateAccountBalance(accountTo.AccountNumberId, accountTo.Balance     = accountTo.Balance + t.Amount);
                if (cardFrom != null)
                {
                    cardFrom.AvailablegDailySpendLimit  = cardFrom.AvailablegDailySpendLimit - t.Amount;
                    cardFrom.AvailableMonthlySpendLimit = cardFrom.AvailableMonthlySpendLimit - t.Amount;
                }
            };

            if (!useTransaction)
            {
                try
                {
                    action.Invoke();
                    _context.SaveChanges();
                    return(t.TransactionId);
                }
                catch
                {
                    throw new TechnicalException("Error Occured during transaction db operation. Transaction Rolled Back");
                }
            }
            else
            {
                using (IDbContextTransaction dbTransaction = _context.Database.BeginTransaction())
                {
                    try
                    {
                        action.Invoke();
                        _context.SaveChanges();
                        dbTransaction.Commit();
                        return(t.TransactionId);
                    }
                    catch (Exception ex)
                    {
                        dbTransaction.Rollback();
                        throw new TechnicalException("Error Occured during transaction db operation. Transaction Rolled Back:" + ex.Message);
                    }
                }
            }
        }
        public int AddCardBasedTransaction(TransactionPM t, string credentialsId, bool useTransaction)
        {
            ValidateCommonTxDetail(t);

            AccountPM accountLoggedIn = _accountsRepository.GetAccountForUser(credentialsId);
            AccountPM accountFrom     = null;
            AccountPM accountTo       = null;
            CardPM    cardTo          = null;
            CardPM    cardFrom        = null;

            switch (t.TransactionType)
            {
            case TransactionType.SendMoneyFromAppToCard:
                if (accountLoggedIn.AccountNumberId != t.AccountNumberIdFromRef)
                {
                    throw new ValidationException("Invalid AccountNumberId");
                }

                cardTo = _cardsRepository.GetCard(t.CardSerialNumberIdTo);
                if (cardTo.CardState != CardState.Active)
                {
                    throw new ValidationException("Invalid card");
                }

                t.AccountNumberIdToRef = cardTo.AccountNumberIdRef;
                accountTo   = GetAccount(t.AccountNumberIdToRef);
                accountFrom = accountLoggedIn;     //_accountsRepository.GetAccount(transaction.AccountNumberIdFrom);
                if (accountFrom.Balance < t.Amount)
                {
                    throw new ValidationException("Insufficient funds");
                }
                break;

            case TransactionType.SendMoneyFromCardToApp:
                if (accountLoggedIn.AccountNumberId != t.AccountNumberIdToRef)
                {
                    throw new ValidationException("Invalid AccountNumberId");
                }

                cardFrom = _cardsRepository.GetCard(t.CardSerialNumberIdFrom);
                if (cardFrom.CardState != CardState.Active)
                {
                    throw new ValidationException("Invalid card");
                }

                if (cardFrom.AvailablegDailySpendLimit < t.Amount)
                {
                    throw new ValidationException("Daily Spend Limit Exceeded");
                }

                if (cardFrom.MonthlySpendLimit < t.Amount)
                {
                    throw new ValidationException("Monthly Spend Limit Exceeded");
                }

                if (String.IsNullOrEmpty(t.CardFromEMVData))
                {
                    throw new ValidationException("Card EMV data not supplied");
                }

                t.AccountNumberIdFromRef = cardFrom.AccountNumberIdRef;
                accountFrom = GetAccount(t.AccountNumberIdFromRef);
                accountTo   = accountLoggedIn;   //_accountsRepository.GetAccount(transaction.AccountNumberIdTo);
                if (accountFrom.Balance < t.Amount)
                {
                    throw new ValidationException("Insufficient funds");
                }
                break;

            default:
                throw new ValidationException("Invalid transaction type: " + t.TransactionType);
            }

            return(StoreTx(t, accountFrom, accountTo, cardFrom, useTransaction));
        }