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