public async Task <Result> PayAsync(PayInputModel input)
        {
            try
            {
                var payment = new Data.Models.Payment
                {
                    OrderId    = input.OrderId,
                    TotalPrice = input.TotalPrice
                };

                var messageData = new PaymentCompletedMessage
                {
                    OrderId = payment.OrderId
                };

                var message = new Message(messageData);

                await this.SaveAsync(payment, message);

                await this.publisher.Publish(messageData);

                await this.MarkMessageAsPublished(message.Id);

                return(Result.Success);
            }
            catch (Exception e)
            {
                var errorMessage = "Failed to save order";

                this.logger.LogError(e, errorMessage);

                return(Result.Failure(new[] { errorMessage }));
            }
        }
 public Task <AsyncTaskResult> HandleAsync(PaymentCompletedMessage message)
 {
     return(_commandService.SendAsync(new ConfirmPayment(message.OrderId, true)));
 }