public async Task <IActionResult> ProceedPaymentRequest([FromBody] PaymentRequest paymentRequest,
                                                                [FromServices] IGenerateGuid gatewayPaymentIdGenerator,
                                                                [FromServices] IKnowAllPaymentRequests paymentRequestsRepository,
                                                                [FromServices] IProcessPayment paymentProcessor)
        {
            var gatewayPaymentId = gatewayPaymentIdGenerator.Generate();

            var commandResult = await _commandHandler.Handle(paymentRequest.AsCommand(gatewayPaymentId));

            switch (commandResult)
            {
            case SuccessCommandResult <Payment> success:
                var paymentDto = success.Entity.AsDto();

                return(AcceptedAtRoute(nameof(PaymentReadController.GetPaymentInfo),
                                       routeValues: new { gateWayPaymentId = paymentDto.GatewayPaymentId },
                                       value: paymentDto));

            case InvalidCommandResult invalid:
                return(ActionResultHelper.ToActionResult(invalid));

            case FailureCommandResult failure:
                return(ActionResultHelper.ToActionResult(failure));


            default:
                throw new NotSupportedException();
            }
        }