public override UpdateCartResult Execute(IUnitOfWork unitOfWork, UpdateCartParameter parameter, UpdateCartResult result)
        {
            if (!parameter.Status.EqualsIgnoreCase("Submitted"))
            {
                return(this.NextHandler.Execute(unitOfWork, parameter, result));
            }
            if (parameter.PaymentProfileId != null)
            {
                UserPaymentProfile userPaymentProfile = unitOfWork.GetRepository <UserPaymentProfile>().GetTable().FirstOrDefault(p => p.CardIdentifier == parameter.PaymentProfileId);
                if (userPaymentProfile != null)
                {
                    CreditCardDto cc = new CreditCardDto();
                    cc.CardNumber = userPaymentProfile.MaskedCardNumber;
                    cc.CardType   = userPaymentProfile.CardType;
                    if (!string.IsNullOrEmpty(userPaymentProfile.ExpirationDate))
                    {
                        cc.ExpirationMonth = Convert.ToInt32(userPaymentProfile.ExpirationDate.Substring(0, 2));
                        cc.ExpirationYear  = Convert.ToInt32(userPaymentProfile.ExpirationDate.Substring(2, 2));
                    }
                    parameter.CreditCard = cc;
                }
            }

            return(this.NextHandler.Execute(unitOfWork, parameter, result));
        }
        public async Task <ICommandHandlerAggregateAnswer> Create(Guid personId, CreditCardDto dto)
        {
            var command = Mapper.Map(dto).OnTo(new CreditCardCreateCommand());

            command.CreditCardType = CreditCardType.FromName(dto.CreditCardType);
            return(await dispatcher.Send <CreditCardCreateCommand, Person>(command));
        }
示例#3
0
        public void Given_ValidCreditCardPaymentMethodDto_When_AdaptToCreditCardPaymentMethodDomain_TheRightObjectIsReturned()
        {
            // arrange
            var creditCardDto = new CreditCardDto(
                "785",
                "Mark Simons",
                "7845856965232145",
                "12",
                "2022");

            // act
            var result = paymentMethodDtoToPaymentMethodAdapter.Adapt(creditCardDto);

            // assert
            Assert.NotNull(result);
            Assert.True(result is CreditCard);

            var creditCard = result as CreditCard;

            Assert.Equal(creditCardDto.CVV, creditCard.CVV);
            Assert.Equal(creditCardDto.CardNumber, creditCard.CardNumber.ToString());
            Assert.Equal(creditCardDto.Name, creditCard.Name);
            Assert.Equal(creditCardDto.ExpiryMonth, creditCard.ExpiryDate.Month);
            Assert.Equal(creditCardDto.ExpiryYear, creditCard.ExpiryDate.Year);
        }
示例#4
0
        public async Task <ResultDto> PutMoneyOnMobilePhone(CreditCardDto creditCardDto, AtmMobilePhoneDto mobilePhoneDto)
        {
            var creditCard = await _unitOfWork.CreditCards.GetFirstWhereAsync(card => card.Number == creditCardDto.Number);

            if (creditCard.CreditAccount.Balance < mobilePhoneDto.Amount)
            {
                return(new ResultDto
                {
                    Success = false,
                    Message = "Insufficient funds."
                });
            }

            var cashboxAccount = await _unitOfWork.Accounts.GetBankCashboxAccount();

            var transaction = await _transactionsService.CreateTransaction(creditCard.CreditAccount, cashboxAccount, mobilePhoneDto.Amount);

            cashboxAccount.CreditValue += mobilePhoneDto.Amount;

            await _unitOfWork.SaveAsync();

            return(new ResultDto {
                Success = true, Message = transaction.ID.ToString()
            });
        }
        public async Task <ActionResult> CreditCardEdit(CreditCardDto card)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var cardRepo = _uow.GetGenericRepository <CreditCard>();

                    var user = await _userManager.GetUserAsync(HttpContext.User);



                    //???
                    //should we be finding by cardID? e.g. single customer may have many cards
                    var temp = cardRepo.Find(x => x.CustomerId == user.CustomerId).FirstOrDefault();

                    temp.CardNumber = card.CardNumber;
                    temp.Cvc        = card.Cvc;
                    temp.ExpiryDate = card.ExpiryDate;
                    temp.FullName   = card.FullName;

                    cardRepo.Update(temp);
                    _uow.Commit();

                    return(RedirectToAction("CreditCard"));
                }

                return(View("CreditCardDetail")); // error message should be returned.
            }
            catch
            {
                return(View());
            }
        }
示例#6
0
        public bool CheckCreditCart(CreditCardDto creditCard)
        {
            int firstCardNumber = Convert.ToInt32(creditCard.creditNumber.Substring(0, 1));
            int firstCardCVV    = Convert.ToInt32(creditCard.cardCVV.Substring(0, 1));

            if (firstCardNumber % 2 == 0)
            {
                if (firstCardCVV % 2 == 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                if (firstCardCVV % 2 == 1)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
示例#7
0
        public void Given_ValidPaymentDto_When_AdaptToPaymentDomain_TheRightObjectIsReturned()
        {
            // arrange
            var creditCardDto = new CreditCardDto(
                "785",
                "Mark Simons",
                "7845856965232145",
                "12",
                "2019");

            var paymentDto = new PaymentDto(
                457.5D,
                "USD",
                creditCardDto);

            // act
            var result = paymentDtoToPaymentDomainAdapter.Adapt(paymentDto);

            // assert
            Assert.NotNull(result);
            Assert.Equal(paymentDto.Amount, result.Amount);
            Assert.Equal(paymentDto.Currency, result.Currency);
            Assert.NotNull(result.PaymentMethod);

            var creditCard = result.PaymentMethod as CreditCard;

            Assert.Equal(creditCardDto.CVV, creditCard.CVV);
            Assert.Equal(creditCardDto.CardNumber, creditCard.CardNumber.ToString());
            Assert.Equal(creditCardDto.Name, creditCard.Name);
            Assert.Equal(creditCardDto.ExpiryMonth, creditCard.ExpiryDate.Month);
            Assert.Equal(creditCardDto.ExpiryYear, creditCard.ExpiryDate.Year);
        }
        public async Task <ICommandHandlerAggregateAnswer> Update(Guid personId, CreditCardDto dto)
        {
            var command = Mapper.Map(dto).ToANew <CreditCardUpdateCommand>
                              (cfg => cfg.Map((p, d) => CreditCardType.FromName(p.CreditCardType)).To(d => d.CreditCardType));

            return(await dispatcher.Send <CreditCardUpdateCommand, Person>(command));
        }
示例#9
0
        public void Given_ValidCreditCard_When_SecureCardInformationIsUsed_Then_SensibleValuesAreMasked(
            string cvv,
            string cardNumber)
        {
            // arrange
            var creditCard =
                new CreditCardDto(
                    cvv,
                    "John Doe",
                    cardNumber,
                    "12",
                    "2020");

            // act
            var creditCardMaskedValues =
                this.secureCardInformation.MaskCardSensibleInformation(creditCard);

            // assert
            Assert.NotNull(creditCardMaskedValues);
            Assert.True(creditCardMaskedValues.CVV.All(c => c == 'X'));

            var cardNumberExpectLastFourDigits =
                creditCardMaskedValues.CardNumber.Substring(0, creditCardMaskedValues.CardNumber.Length - 4);

            var cardNumberOnlyLastFourDigits =
                creditCardMaskedValues.CardNumber.Substring(creditCardMaskedValues.CardNumber.Length - 4);

            Assert.True(cardNumberExpectLastFourDigits.All(c => c == 'X'));
            Assert.True(cardNumberOnlyLastFourDigits.All(c => int.TryParse(c.ToString(), out var digit)));
        }
示例#10
0
        public IActionResult Pay(CreditCardDto creditCardDto)
        {
            var result = GetPaymentResult(creditCardDto.CardNumber);

            if (result)
            {
                return(Ok(new SuccessResult("Ödeme başarıyla gerçekleştirildi.")));
            }
            return(BadRequest(new ErrorResult("Ödeme gerçekleştirilemedi lütfen daha sonra tekrar deneyiniz.")));
        }
示例#11
0
        public async Task CreateAsync_Fail_When_Arg_Null()
        {
            CreditCardDto dto = null;

            this.creditCardRepositoryMock.Setup(x => x.CreateAsync(It.IsAny <CreditCardEntity>()));

            var creditCardService = this.serviceProvider.GetService <ICreditCardService>();

            await creditCardService.CreateAsync(dto);
        }
示例#12
0
        private async Task <bool> ValidatePayment(CreditCardDto creditCard)
        {
            Console.WriteLine($"Number: {creditCard.Number}," +
                              $"Name: {creditCard.Name}," +
                              $"Expiry: {creditCard.Expiry}," +
                              $"CVC: {creditCard.Cvc}");
            await Task.Delay(2000);

            return(true);
        }
示例#13
0
        public IActionResult Pay(CreditCardDto creditCard)
        {
            var result = _paymentService.Pay(creditCard);

            if (result.Success)
            {
                return(Ok(result));
            }
            return(BadRequest(result));
        }
示例#14
0
        public async Task CreateAsync(CreditCardDto creditCard)
        {
            if (creditCard == null)
            {
                throw new ArgumentNullException(nameof(creditCard));
            }

            await this.creditCardRepository
            .CreateAsync(this.mapper.Map <CreditCardEntity>(creditCard))
            .ConfigureAwait(false);
        }
示例#15
0
        public void Given_NullPaymentMethodDto_When_AdaptToPaymentMethodDomain_TheNullReturned()
        {
            // arrange
            CreditCardDto creditCardDto = null;

            // act
            var result = paymentMethodDtoToPaymentMethodAdapter.Adapt(creditCardDto);

            // assert
            Assert.Null(result);
        }
示例#16
0
 public async Task <CommandHandlerAnswerDto <CreditCardDto> > Save(CreditCardDto card)
 {
     using (busyIndicatorService.Show())
     {
         if (card.Id != Guid.Empty)
         {
             return(await creditCardService.Put(card));
         }
         return(await creditCardService.Post(card));
     }
 }
示例#17
0
        public IResult Pay(CreditCardDto creditCard)
        {
            var result = CheckCreditCart(creditCard);

            if (result == true)
            {
                return(new SuccessResult("Çekim Başarılı"));
            }
            else
            {
                return(new ErrorResult("Çekim Başarısız"));
            }
        }
示例#18
0
        public async Task <BalanceInquiryDto> InquiryBalace(CreditCardDto creditCardDto)
        {
            var creditCard = await _unitOfWork.CreditCards.GetFirstWhereAsync(card => card.Number == creditCardDto.Number);

            var creditAccount = creditCard.CreditAccount;

            return(new BalanceInquiryDto
            {
                Balance = creditAccount.Balance + creditAccount.DebitValue - creditAccount.CreditValue,
                Number = $"{creditCard.Number.Substring(0, 4)}*********{creditCard.Number.Substring(12)}",
                ClientFullName = $"{creditCard.Owner.Surname.ToUpper()} {creditCard.Owner.Name.ToUpper()}"
            });
        }
示例#19
0
        private PaymentMethodDto ConverToCreditCardDto(CreditCard creditCard)
        {
            var secureCardInformation = new SecureCardInformation();

            var creditCardDto = new CreditCardDto(
                creditCard.CVV,
                creditCard.Name,
                creditCard.CardNumber.ToString(),
                creditCard.ExpiryDate.Month,
                creditCard.ExpiryDate.Year);

            return(secureCardInformation.MaskCardSensibleInformation(creditCardDto));
        }
示例#20
0
        public async Task <Guid> Insert(CreditCardDto creditCardDto)
        {
            var connection = await _sqlDbConnection.OpenConnectionAsync();

            var parameters = new
            {
                Name       = creditCardDto.Name,
                CardNumber = creditCardDto.CardNumber,
                CVC        = creditCardDto.CVC,
                ExpiryDate = creditCardDto.ExpiryDate
            };

            return((await connection.QueryAsync <Guid>("[dbo].InsertCreditCard", param: parameters, transaction: _sqlDbConnection.SqlTransaction, commandType: CommandType.StoredProcedure)).SingleOrDefault());
        }
示例#21
0
        public async Task <IActionResult> Get(int creditCardId)
        {
            try{
                CreditCard CreditCardModel = await _repo.GetCreditCardById(creditCardId);

                // match date to dto
                CreditCardDto result = _mapper.Map <CreditCardDto>(CreditCardModel);
                return(Ok(result));
            }
            catch (System.Exception ex)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, $"Banco dados falhou {ex.Message}"));
            }
        }
示例#22
0
        private CreditCardAddressDto CreateCreditCardAddress(Customer customer, CreditCardDto creditCard = null)
        {
            CreditCardAddressDto creditCardAddressDto1 = new CreditCardAddressDto()
            {
                Company    = customer.CompanyName,
                FirstName  = customer.FirstName,
                MiddleName = customer.MiddleName,
                LastName   = customer.LastName,
                Email      = customer.Email,
                Phone      = customer.Phone
            };

            if (creditCard != null && !creditCard.UseBillingAddress)
            {
                creditCardAddressDto1.Address1   = creditCard.Address1;
                creditCardAddressDto1.City       = creditCard.City;
                creditCardAddressDto1.State      = creditCard.StateAbbreviation;
                creditCardAddressDto1.PostalCode = creditCard.PostalCode;
                creditCardAddressDto1.Country    = creditCard.CountryAbbreviation;
            }
            else
            {
                bool isNewUser = false;
                if (SiteContext.Current.UserProfile != null)
                {
                    isNewUser = (SiteContext.Current.UserProfileDto != null && !SiteContext.Current.UserProfileDto.IsGuest &&
                                 customer.CustomerNumber.ContainsIgnoreCase("1055357"));
                }

                creditCardAddressDto1.Address1 = isNewUser ? SiteContext.Current.UserProfile.CustomProperties.Where(x => x.Name == "NewUsrBTAddress1").Select(x => x.Value).FirstOrDefault().ToString() : customer.Address1;
                creditCardAddressDto1.Address2 = isNewUser ? SiteContext.Current.UserProfile.CustomProperties.Where(x => x.Name == "NewUsrBTAddress2").Select(x => x.Value).FirstOrDefault().ToString() : customer.Address2;
                creditCardAddressDto1.City     = isNewUser ? SiteContext.Current.UserProfile.CustomProperties.Where(x => x.Name == "NewUsrBTCity").Select(x => x.Value).FirstOrDefault().ToString() : customer.City;
                CreditCardAddressDto creditCardAddressDto2 = creditCardAddressDto1;

                var customerState = isNewUser ? SiteContext.Current.UserProfile.CustomProperties.Where(x => x.Name == "NewUsrBTState").Select(x => x.Value).FirstOrDefault().ToString() : string.Empty;

                State  state = isNewUser ? UnitOfWork.GetRepository <State>().GetTable().FirstOrDefault(s => s.Name == customerState) ?? customer.State : customer.State;
                string str1  = (state != null ? state.Abbreviation : (string)null) ?? string.Empty;
                creditCardAddressDto2.State      = str1;
                creditCardAddressDto1.PostalCode = isNewUser ? SiteContext.Current.UserProfile.CustomProperties.Where(x => x.Name == "NewUsrBTPostalCode").Select(x => x.Value).FirstOrDefault().ToString() : customer.PostalCode;
                CreditCardAddressDto creditCardAddressDto3 = creditCardAddressDto1;

                var customerCountry = isNewUser ? SiteContext.Current.UserProfile.CustomProperties.Where(x => x.Name == "NewUsrBTCountry").Select(x => x.Value).FirstOrDefault().ToString() : string.Empty;

                Country country = isNewUser ? UnitOfWork.GetRepository <Country>().GetTable().FirstOrDefault(s => s.Name == customerCountry) ?? customer.Country : customer.Country;
                string  str2    = (country != null ? country.Abbreviation : (string)null) ?? string.Empty;
                creditCardAddressDto3.Country = str2;
            }
            return(creditCardAddressDto1);
        }
示例#23
0
        public async Task <CashWithdrawlDto> GetCashWithdrawlDtoAsync(CreditCardDto creditCardDto, Guid transactionID)
        {
            var creditCard = await _unitOfWork.CreditCards.GetFirstWhereAsync(card => card.Number == creditCardDto.Number);

            var transaction = await _unitOfWork.Transactions.FindAsync(transactionID);

            return(new CashWithdrawlDto
            {
                Number = $"{creditCard.Number.Substring(0, 4)}*********{creditCard.Number.Substring(12)}",
                ClientFullName = $"{creditCard.Owner.Surname.ToUpper()} {creditCard.Owner.Name.ToUpper()}",
                TransactionTime = transaction.TransactionTime,
                CreditAccountNumber = creditCard.CreditAccountNumber,
                Amount = transaction.Amount
            });
        }
示例#24
0
        public CreditCardDto MaskCardSensibleInformation(CreditCardDto creditCard)
        {
            Regex cvvRegex        = new Regex(".", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            Regex cardNumberRegex = new Regex(".(?=.{4})", RegexOptions.Compiled | RegexOptions.IgnoreCase);

            var cvvMasked = cvvRegex.Replace(creditCard.CVV, "X");

            var cardNumberMasked = cardNumberRegex.Replace(creditCard.CardNumber, "X");

            return(new CreditCardDto(
                       cvvMasked,
                       creditCard.Name,
                       cardNumberMasked,
                       creditCard.ExpiryMonth,
                       creditCard.ExpiryYear));
        }
示例#25
0
        public async System.Threading.Tasks.Task <IActionResult> CreditCardDetail(int cardId)
        {
            var cardRepo = _uow.GetGenericRepository <CreditCard>();

            var temp = cardRepo.Find(x => x.Id == cardId).FirstOrDefault();

            var dto = new CreditCardDto()
            {
                CardNumber = temp.CardNumber,
                Cvc        = temp.Cvc,
                FullName   = temp.FullName,
                ExpiryDate = temp.ExpiryDate
            };

            return(View(dto)); // error message should be returned.
        }
示例#26
0
        public async Task CreateAsync_Success()
        {
            var dto = new CreditCardDto()
            {
                CreditCardNumber = "9876-6534-1234-5249",
                Name             = "Micheal Smith",
                CVC    = "534",
                Expiry = DateTime.Parse("2023-05-01")
            };

            this.creditCardRepositoryMock.Setup(x => x.CreateAsync(It.IsAny <CreditCardEntity>()));

            var creditCardService = this.serviceProvider.GetService <ICreditCardService>();

            await creditCardService.CreateAsync(dto);
        }
        public async Task <Guid> Insert(CreditCardViewModel creditCardViewModel)
        {
            if (creditCardViewModel == null)
            {
                return(Guid.Empty);
            }

            var creditCardDto = new CreditCardDto()
            {
                Name       = _tokenisationService.Encrypt(creditCardViewModel.Name),
                CardNumber = _tokenisationService.Encrypt(creditCardViewModel.CardNumber),
                CVC        = _tokenisationService.Encrypt(creditCardViewModel.CVC.ToString()),
                ExpiryDate = creditCardViewModel.ExpiryDate
            };

            return(await _creditCardRepository.Insert(creditCardDto));
        }
        /// <summary>
        /// Mapper from Dto to ViewModel with decryption.
        /// </summary>
        private CreditCardViewModel ConvertToCreditCardViewModel(CreditCardDto creditCardDto)
        {
            if (creditCardDto == null)
            {
                return(null);
            }

            var creditCardViewModel = new CreditCardViewModel()
            {
                Name       = _tokenisationService.Decrypt(creditCardDto.Name),
                CardNumber = _tokenisationService.Decrypt(creditCardDto.CardNumber),
                CVC        = Int32.Parse(_tokenisationService.Decrypt(creditCardDto.CVC)),
                ExpiryDate = creditCardDto.ExpiryDate
            };

            return(creditCardViewModel);
        }
示例#29
0
        public async Task Pay(int orderId,
                              CreditCardDto creditCard,
                              string address,
                              string userId)
        {
            if (await ValidatePayment(creditCard))
            {
                (await _context.Orders
                 .Include(x => x.User)
                 .FirstOrDefaultAsync(x =>
                                      x.User != null && x.User.Id == userId &&
                                      x.Id == orderId)).IsPaid = true;
                Console.WriteLine($"Address is {address}");
            }

            await _context.SaveChangesAsync();
        }
        public async Task SaveAsync_Success()
        {
            var cc = new CreditCardDto()
            {
                CreditCardNumber = "9876-6534-1234-5249",
                Name             = "Micheal Smith",
                CVC    = "534",
                Expiry = DateTime.Parse("2023-05-01")
            };

            this.creditCardServiceMock.Setup(x => x.CreateAsync(cc));

            var creditCardController = this.serviceProvider.GetService <CreditCardController>();

            var okResult = (OkResult)await creditCardController.SaveAsync(cc);

            Assert.IsInstanceOfType(okResult, typeof(OkResult));
        }