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); }