public async Task <PaymentResponse> ChoosePaymentHandler(Payment_Dto payment_dto) { var pendingState = await GetPaymentStatusByStatus((int)PaymentStatusEnum.PENDING); if (pendingState is null) { throw new NullReferenceException(nameof(pendingState)); } payment_dto.Status = pendingState.Id; Payment PaymentModel = _mapper.Map <Payment_Dto, Payment>(payment_dto); switch (payment_dto.amount) { case decimal amount when payment_dto.amount <= 20: _logger.LogInformation("Using ICheapPaymentGateway for processing payment"); return(await ICheapPaymentGateway(PaymentModel, 0)); case decimal amount when payment_dto.amount > 20 && payment_dto.amount < 500: _logger.LogInformation("Using IExpensivePaymentGateway for processing payment"); return(await IExpensivePaymentGateway(PaymentModel, false, 0)); default: _logger.LogInformation("Using PremiumPaymentService for processing payment"); return(await IExpensivePaymentGateway(PaymentModel, true, 0)); } }
public async Task<IActionResult> ProcessPayment(Payment_Dto model, [FromServices] IOptions<ApiBehaviorOptions> apiBehaviorOptions) { if (!ModelState.IsValid) return BadRequest(ModelState); var validationResult = validators.ValidateModel(model); if (!validationResult.Item1) { foreach (KeyValuePair<string, string> error in validationResult.Item2) { ModelState.AddModelError(error.Key, error.Value); } return apiBehaviorOptions.Value.InvalidModelStateResponseFactory(ControllerContext); } var result = await _paymentRepository.ChoosePaymentHandler(model); Response.Headers.Add("X-Resource", Url.Action("Get", new { id = result.Id})); return Created("get_payment_status", result); }
public (bool, List <KeyValuePair <string, string> >) ValidateModel(Payment_Dto model) { bool isValid = true; List <KeyValuePair <string, string> > errors = new List <KeyValuePair <string, string> >(); bool validNumber = ValidateCreditCard(model.card_number); if (!validNumber) { isValid = false; errors.Add(new KeyValuePair <string, string>("card_number", "invalid credit card")); } var validExpiryDate = validateExpiryDate(model.expiry_date, DateTime.UtcNow); if (!validExpiryDate.Item1) { isValid = validExpiryDate.Item1; errors.Add(validExpiryDate.Item2.Value); } return(isValid, errors); }