コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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);
            }
        }