public async Task <IActionResult> PayWithNewCreditCard([FromBody] NewCreditCardPaymentRequest request) { return(OkOrBadRequest(await _creditCardPaymentProcessingService.Authorize(request, LanguageCode, ClientIp, _bookingPaymentCallbackService, await _agentContextService.GetAgent()))); }
public async Task <Result <PaymentResponse> > Authorize(NewCreditCardPaymentRequest request, string languageCode, string ipAddress, IPaymentsService paymentsService, AgentContext agent) { var(_, isFailure, servicePrice, error) = await paymentsService.GetServicePrice(request.ReferenceCode); if (isFailure) { return(Result.Failure <PaymentResponse>(error)); } return(await Validate(request) .Bind(Authorize) .TapIf(IsSaveCardNeeded, SaveCard) .Bind(StorePaymentResults));;
static Result Validate(NewCreditCardPaymentRequest payment) { return(GenericValidator <NewCreditCardPaymentRequest> .Validate(p => { if (payment.IsSaveCardNeeded) { p.RuleFor(r => r.CardInfo) .ChildRules(c => { c.RuleFor(info => info.HolderName) .NotEmpty() .WithMessage($"{nameof(CreditCardInfo.HolderName)} is required to save card"); }); } }, payment)); }
public async Task <Result <PaymentResponse> > Authorize(NewCreditCardPaymentRequest request, string languageCode, string ipAddress, IPaymentCallbackService paymentCallbackService, AgentContext agent) { _logger.LogCreditCardAuthorizationStarted(request.ReferenceCode); var(_, isFailure, servicePrice, error) = await paymentCallbackService.GetChargingAmount(request.ReferenceCode); if (isFailure) { _logger.LogCreditCardAuthorizationFailure(request.ReferenceCode, error); return(Result.Failure <PaymentResponse>(error)); } return(await Validate(request) .Bind(Authorize) .TapIf(IsSaveCardNeeded, SaveCard) .Bind(StorePaymentResults) .Finally(WriteLog));