public TransactionDto Pay(CreditCardDto from, BankAccountDto to, double amountDollar) { if (!IsValid(from)) { return(null); } var builder = new TransactionBuilder(); Transaction transaction = builder .From(from.CardNumber) .To(to.Id) .AmountDollar(amountDollar) .TimeUtcNow() .Build(); using (var db = new BankSystemContext()) { Transaction saved = db.Transactions.Add(transaction); BankAccountDetails fromBank = db.BankAccounts.FirstOrDefault(bank => bank.CreditCards.Any(card => card.CardNumber == from.CardNumber)); if (fromBank == null) { return(null); } fromBank.Balance -= transaction.AmountDollar; BankAccountDetails toBank = db.BankAccounts.Find(to.Id); toBank.Balance += transaction.AmountDollar; db.SaveChanges(); return(mapper.Map <TransactionDto>(transaction)); } }
public BankAccountDto CreateEmptyBankAccount(string name) { BankAccountDetails details = new BankAccountDetails { HolderName = name, }; using (var db = new BankSystemContext()) { db.BankAccounts.Add(details); db.SaveChanges(); } return(mapper.Map <BankAccountDto>(details)); }
public BankAccountDto DepositMoney(int bankId, double amountDollar) { if (amountDollar > 10000 || amountDollar <= 0) { return(null); } using (var db = new BankSystemContext()) { BankAccountDetails bank = db.BankAccounts.Find(bankId); if (bank == null) { return(null); } bank.Balance += amountDollar; db.SaveChanges(); return(mapper.Map <BankAccountDto>(bank)); } }
private CreditCardDetails GenerateRandomCard(string prefix, int length, BankAccountDetails bank) { string ccnumber = prefix; while (ccnumber.Length < (length - 1)) { double rnd = (random.NextDouble() * 1.0f - 0f); ccnumber += Math.Floor(rnd * 10); } // reverse number and convert to int var reversedCCnumberstring = ccnumber.ToCharArray().Reverse(); var reversedCCnumberList = reversedCCnumberstring.Select(c => Convert.ToInt32(c.ToString())); // calculate sum //Luhn Algorithm int sum = 0; int pos = 0; int[] reversedCCnumber = reversedCCnumberList.ToArray(); while (pos < length - 1) { int odd = reversedCCnumber[pos] * 2; if (odd > 9) { odd -= 9; } sum += odd; if (pos != (length - 2)) { sum += reversedCCnumber[pos + 1]; } pos += 2; } // calculate check digit int checkdigit = Convert.ToInt32((Math.Floor((decimal)sum / 10) + 1) * 10 - sum) % 10; ccnumber += checkdigit; var date = DateTime.Now.AddYears(6).AddMonths(6); using (var db = new BankSystemContext()) { var card = new CreditCardDetails { BankAccountId = bank.Id, CardNumber = ccnumber, CardVerificationValue = (random.Next(1000) + "").PadLeft(3), Month = date.Month, Year = date.Year }; db.CreditCards.Add(card); db.SaveChanges(); return(card); } }