コード例 #1
0
        private async Task <IPaymentGateway?> ResolvePaymentGateway(Guid paymentId, PaymentType paymentType)
        {
            try
            {
                var paymentGateway = paymentGatewayFactory.ResolveGateway(paymentType);

                if (paymentGateway is not null)
                {
                    return(paymentGateway);
                }

                await AddPaymentState(paymentId, paymentType, false, $"Could Not Find {paymentType} Gateway");

                if (paymentType != PaymentType.Expensive)
                {
                    return(paymentGateway);
                }

                paymentGateway = paymentGatewayFactory.ResolveGateway(PaymentType.Cheap);

                if (paymentGateway is null)
                {
                    await AddPaymentState(paymentId, paymentType, false, "Could Not Find Cheap Gateway To Replace Expensive Gateway");
                }

                return(paymentGateway);
            }
            catch (PaymentGatewayException e)
            {
                logger.LogCritical(e, "No Gateway was found");
                await AddPaymentState(paymentId, paymentType, false, $"Could Not Resolve Any Gateway");
            }

            return(null);
        }