public Task Handle(PaymentDeniedEvent message, IMessageHandlerContext context)
        {
            //TODO: actual business logic goes here

            log.Info($"Payment denied for CartId {message.CartId}");
            MarkAsComplete();
            return(Task.CompletedTask);
        }
        public Task Handle(StartPaymentCommand message, IMessageHandlerContext context)
        {
            //TODO: acual charging logic goes here

            //randomly return negative events
            if (random.Next(0, 5) == 0)
            {
                var paymentDenied = new PaymentDeniedEvent
                {
                    CartId = message.CartId
                };
                return(context.Publish(paymentDenied));
            }

            var paymentCompleted = new PaymentCompletedEvent
            {
                CartId = message.CartId
            };

            return(context.Publish(paymentCompleted));
        }