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(); }
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(); }
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(); }
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)); }