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();
            }
        }
Example #2
0
 public PaymentRequestCommandHandler(IEventSourcedRepository <Payment> repository,
                                     IKnowAllPaymentRequests paymentRequestsMemory,
                                     IProcessPayment paymentProcessor,
                                     IMapMerchantToBankAdapter bankAdapterMapper,
                                     IKnowSendRequestToBankSynchrony synchronyMaster, ILogger <PaymentRequestCommandHandler> logger)
 {
     _repository            = repository;
     _paymentRequestsMemory = paymentRequestsMemory;
     _paymentProcessor      = paymentProcessor;
     _bankAdapterMapper     = bankAdapterMapper;
     _synchronyMaster       = synchronyMaster;
     _logger = logger;
 }