예제 #1
0
        public async Task <WorkflowResult> AddPaymentAsync(decimal amount, Guid userId)
        {
            using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    WorkflowResult workflowResult = await _decorated.AddPaymentAsync(amount, userId);

                    if (workflowResult.Success)
                    {
                        transactionScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                    return(workflowResult);
                }
                catch (Exception ex)
                {
                    Transaction.Current.Rollback();
                    int errorId = await _applicationLog.LogExceptionAsync(ex);

                    return(new WorkflowResult(
                               new[] {
                        Resources.Resource.InternalServerErrorMessage,
                        string.Format(Resources.Resource.GeneratedErrorIdMessage, errorId)
                    }));
                }
            }
        }
예제 #2
0
        public async Task <ActionResult> OnPostAsync([FromServices] OrderFactory orderFactory)
        {
            if (orderFactory == null)
            {
                throw new ArgumentNullException(nameof(orderFactory));
            }

            ModelState.Clear();

            if (!TryValidateModel(AddPaymentRequest))
            {
                ModelState.TryAddModelError("", "Parametros incorrectos");
                return(await TryLoadViewModelAsync());
            }

            EnaBricks.Generics.Option <IOrder> orderOption = await orderFactory.OrderAsync(Id);

            if (!orderOption.Any())
            {
                return(Redirect("/Error"));
            }

            IOrder order = orderOption.Single();

            WorkflowResult result = await order.AddPaymentAsync(AddPaymentRequest.Amount, UserId());

            if (!result.Success)
            {
                for (int i = 0; i < result.Errors.Length; i++)
                {
                    ModelState.TryAddModelError("", result.Errors[i]);
                }
            }

            return(await TryLoadViewModelAsync());
        }