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