public ResultModel <string> ProcessPayment(ProcessPaymentViewModel model) { var resultModel = new ResultModel <string>(); var paymentStatusModel = new PaymentStateViewModel { PaymentStateEnum = Models.Enum.PaymentStateEnum.Pending, }; model.PaymentStateViewModel = paymentStatusModel; try { resultModel = SelectPaymentProcessor(model); var response = (ProcessPayment)model; response.PaymentState = (PaymentState)model.PaymentStateViewModel; response.PaymentState.Status = response.PaymentState.PaymentStateEnum.GetDescription(); if (!resultModel.ErrorMessages.Any()) { _paymentStateRepo.Insert(response.PaymentState); _processPaymentRepo.Insert(response); } _unitOfWork.SaveChanges(); } catch (Exception ex) { resultModel.AddError(ex.Message); return(resultModel); } return(resultModel); }
public async Task <PaymentStateViewModel> Pay(PaymentViewModel model) { var payment = new Payment() { Amount = model.Amount, CardHolder = model.CardHolder, CreditCardNumber = model.CreditCardNumber, ExpirationDate = model.ExpirationDate, Id = new Guid(), SecurityCode = model.SecurityCode }; var state = new PaymentState() { Payment = payment, PaymentId = payment.Id, CreatedDate = DateTime.Now, State = PaymentStateEnum.Pending }; db.Payments.Add(payment); db.PaymentStates.Add(state); await db.SaveChangesAsync(); if (model.Amount <= 20) { var paymentState = ProcessPayment(_cheapPaymentGateway, payment); return(paymentState); } else if (model.Amount > 20 && model.Amount <= 500) { var paymentState = new PaymentStateViewModel(); paymentState = ProcessPayment(_expensivePaymentGateway, payment); if (paymentState != null && paymentState.State == PaymentStateEnum.Processed) { return(paymentState); } else { paymentState = ProcessPayment(_cheapPaymentGateway, payment); } return(paymentState); } throw new Exception("Payment Could Not Be Processed"); }
public PaymentStateViewModel ProcessPayment() { Random random = new Random(); int num = random.Next(1, 100); if (num % 2 == 0) { PaymentStateViewModel returnModel = new PaymentStateViewModel { CreatedDate = DateTime.Now, State = Entities.PaymentStateEnum.Processed }; return(returnModel); } else { PaymentStateViewModel returnModel = new PaymentStateViewModel { CreatedDate = DateTime.Now, State = Entities.PaymentStateEnum.Failed }; return(returnModel); } }